我想使用R
绘制(基本上是饼图)这个mysql数据rs< - dbSendQuery(con,“select count(uid),学校信息组按学校顺序(uid)desc limit 5”)
d2< - fetch(rs,n = -1)
d2
count(uid) school
109 A
88 B
77 C
44 D
32 E
//如何在R
中绘制计数(uid)Vs school答案 0 :(得分:2)
您的第一个列名称可能会导致一些问题,最好将其重命名为count.uid
。我假设d2
是data.frame。
pie(d2$count.uid,labels=d2$school)
答案 1 :(得分:1)
我想出了一个用ggplot2制作饼图的非常有用的功能。从本质上讲,它将为任何超过总面积5%的行业创建带有百分比标签的饼图。 survey是您加载的数据集,varname是一个具有变量名称的字符串,threshold可以更改文本显示的级别,而palette是您想要使用的颜色集,如果您不想使用默认的彩虹一个(如果你有太多因素,很难阅读。)以下是我用它制作的一个例子:
以下是代码,您可以根据需要使用它/修改它。让它可读的真正技巧是调整geom_text()和geom_bar()的宽度,这允许百分比具有更大的半径。不幸的是,对于较小的分辨率,它不能很好地工作,但如果你有至少640x640,你应该没有任何问题。
我使用了eval(parse(...))方法,因为一旦你习惯了它,我发现它可以快速使用,但如果有人有任何其他建议,请告诉我。
piechart<-function(survey,varname,threshold=0.05,palette=-1){
require(grid)
require(ggplot2)
n=dim(survey)[1]
#print(names(survey))
eval(parse(text=paste0(c("tab =
as.data.frame(table(survey$",varname,"))"),collapse="")))
colnames(tab)[1]=varname
n2=dim(tab)[1]
scb=""
if (palette !=-1) scb="scale_fill_brewer(palette=palette)+"
.e<-environment()
p=eval(parse(text=paste0(c('ggplot(tab,aes(x=3,fill=',varname,',y=Freq),environment=.e)+
geom_bar(width=11,stat="identity")+coord_polar(theta="y")+',
scb,'xlab("")+ylab("")+labs(title="Responses by ',varname,'") +scale_y_continuous()+
geom_text(aes(label=ifelse(Freq/n>threshold,sprintf("%.1f%%",Freq/n*100),""),
size=12,y=Freq/2+c(0,cumsum(Freq)[-n2]),x=6.5))+theme(axis.ticks.y=element_blank(),
axis.ticks.x=element_blank(),axis.text.x=element_blank(),axis.text.y=element_blank(),
panel.grid=element_blank(),plot.margin= unit(c(-1,0,-1,0), "cm"))+
guides(size="none")'),collapse="")))
print(p)
}
另外,正如保罗所说,饼图应该谨慎使用,但它们有时会很有用。
答案 2 :(得分:0)
你也可以使用ggplot2,查看coord_polar几何:
pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) +
geom_bar(width = 1)
pie + coord_polar(theta = "y")
虽然关于制作漂亮图表的文献并不认为饼图是一个不错的选择。