如何制作饼图?

时间:2011-11-24 10:50:50

标签: r

我想使用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

3 个答案:

答案 0 :(得分:2)

您的第一个列名称可能会导致一些问题,最好将其重命名为count.uid。我假设d2是data.frame。

pie(d2$count.uid,labels=d2$school)

答案 1 :(得分:1)

我想出了一个用ggplot2制作饼图的非常有用的功能。从本质上讲,它将为任何超过总面积5%的行业创建带有百分比标签的饼图。 survey是您加载的数据集,varname是一个具有变量名称的字符串,threshold可以更改文本显示的级别,而palette是您想要使用的颜色集,如果您不想使用默认的彩虹一个(如果你有太多因素,很难阅读。)以下是我用它制作的一个例子:

Pie chart

以下是代码,您可以根据需要使用它/修改它。让它可读的真正技巧是调整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") 

虽然关于制作漂亮图表的文献并不认为饼图是一个不错的选择。