论坛好像不能传图片,类型名称也忘了
可以用作统计特征人口,整个人口用几排相同的小人表示,然后某一特征的人涂成特定颜色
R能制作这样的图形吗?
R能不能绘制这种图形??
利用怡轩的showtext包,结合自己乱画的小人儿字体,在ggplot2里面:
五湖四海大联盟[s:11] pdf矢量支持哦[s:17]
回复 第2楼 的 doctorjxd:论坛怎样插入图片?
回复 第2楼 的 doctorjxd:
我了个去,牛大发了!!!
回复 第3楼 的 qxde01:
自带附件确实会方便些,但太难管理,可移植性不好。之前稍微动了一下论坛系统,附件就死了一大片。现在都用imgur装图,也不算太麻烦。
回复 第2楼 的 doctorjxd:
仔仔体?你真是精力旺盛,技术就是这样被滥用的——我怀疑他所说的那种图很有可能是类似于《经济学人》或其他机构发布的报告或专业刊物上面的那种图表,那些图片多数是用AI和PS美工合成的。
回复 第2楼 的 doctorjxd:亮了!
回复 第2楼 的 doctorjxd:
求字体文件!
我来凑个热闹。[s:11]
link = "http://img.dafont.com/dl/?f=wm_people_1";<br />
download.file(link, "wmpeople1.zip", mode = "wb");<br />
unzip("wmpeople1.zip");</p>
<p>library(showtext);<br />
font.add("wmpeople1", "wmpeople1.ttf");</p>
<p>library(ggplot2);<br />
library(plyr);<br />
library(Cairo);</p>
<p>dat = read.csv(textConnection('<br />
edu,educode,gender,population<br />
未上过学,1,男,17464<br />
未上过学,1,女,41268<br />
小 学,2,男,139378<br />
小 学,2,女,154854<br />
初 中,3,男,236369<br />
初 中,3,女,205537<br />
高 中,4,男,94528<br />
高 中,4,女,70521<br />
大专及以上,5,男,57013<br />
大专及以上,5,女,50334<br />
'));</p>
<p>dat$int = round(dat$population / 10000);<br />
gdat = ddply(dat, "educode", function(d) {<br />
male = d$int[d$gender == "男"];<br />
female = d$int[d$gender == "女"];<br />
data.frame(gender = c(rep("男", male), rep("女", female)),<br />
x = 1:(male + female));<br />
});<br />
gdat$char = ifelse(gdat$gender == "男", "p", "u");</p>
<p>CairoPNG("edu.png", 600, 300, pointsize = 15);<br />
showtext.begin();<br />
ggplot(gdat, aes(x = x, y = educode)) +<br />
geom_text(aes(label = char, colour = gender),<br />
family = "wmpeople1", size = 7) +<br />
scale_x_continuous("人数(千万)") +<br />
scale_y_discrete("受教育程度",<br />
labels = unique(dat$edu[order(dat$educode)])) +<br />
scale_colour_manual("性别", values = c("#00BFC4", "#F8766D")) +<br />
ggtitle("2012年统计数据");<br />
showtext.end();<br />
dev.off();
</p>
回复 第9楼 的 Ihavenothing:
屌炸天这是,不过这句话报错了
gdat = ddply(dat, "educode", function(d) {
male = d$int[d$gender == "男"];
female = d$int[d$gender == "女"];
data.frame(gender = c(rep("男", male), rep("女", female)),
x = 1:(male + female));
});
回复 第10楼 的 daigazi:
加载了plyr包吗?
回复 第11楼 的 Ihavenothing:
加载了。
Error in rep("男", male) : invalid 'times' argument
rep("nan",c(1,3,4))这样不行
回复 第12楼 的 daigazi:
猜测是万恶的中文编码问题。只好换成下面这句了:
gdat = ddply(dat, "educode", function(d) {<br />
data.frame(gender = c(rep("男", d$int[1]), rep("女", d$int[2])),<br />
x = 1:sum(d$int));<br />
});
</p>回复 第13楼 的 Ihavenothing:
又是Error in rep("男", d$int[1]) : invalid 'times' argument
> Sys.info()
sysname release
"Windows" "7 x64"
version nodename
"build 7601, Service Pack 1" "GAZI"
machine login
"x86-64" "Administrator"
user effective_user
"Administrator" "Administrator"
回复 第14楼 的 daigazi:
那就不知道了,你把数据中的中文都改成英文试试吧……我是一直能跑通的……
回复 第4楼 的 Ihavenothing:回复 第6楼 的 zggjtsgzczh:
二楼的字体是,我用fontforge自建了一个ttf字体文件,涂鸦了一个小人儿作为字符。绘画功底太差,献丑了。
利用这个思路,结合showtext包,可以把自己的任何涂鸦,或者从其它软件导入到字体中的图形,以矢量的方式绘制在数据图中,是不是很酷?
showtext包为我们的数据绘图,增加了矢量插图方法。showtext不仅可以show text,而且可以show fig!
回复 第9楼 的 Ihavenothing:
还是版主的图规范大气[s:11]
版主推荐的字体网站也酷啊!
突发奇想,利用showtext,图片其实可以放在坐标轴标题上,这是以前不敢想的:
代码请点击此处
showtext是解放思想,提高生产力的好工具![s:17]
回复 第15楼 的 Ihavenothing:试试tmcn包的toUTF8.
果断收藏了,学习无止境。不过真是太好玩了
回复 第16楼 的 doctorjxd:
看到这图,我瞬间就暴走了。[s:11]
回复 第2楼 的 doctorjxd:赞