如何使用ggplot2绘制饼图pie
如何使用ggplot2绘制饼图pie
这篇文章主要介绍如何使用ggplot2绘制饼图pie,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
绘制饼图的过程中,利用ggplot2的geom_bar结合coord_polar实现,需要理解的点是饼图的排布是按照aes(fill)的因子顺序确定的。譬如数据如下
>dattypeNum1A902B343C564D995E15
必须根据数据先确定mapping 中aes(fill)的因子顺序,譬如这里会按照dat$type 填充,这种非有序因子会基于字母顺序来默认其填充顺序。
为了确定数据填充的先后,同时方便在不同区域上填写上对应数据的大小,所以会先去创建有序因子,从而使数据列dat$Num的自然顺序和因子的顺序在一定程度上一致(一致的同向对应或反向对应)。譬如如下使方向一致:
dat$type=factor(dat$type,levels=dat$type,order=T)dat$type
有序因子的结果则如下,和dat$Num的顺序能够一致上,不会出现对应错乱问题
[1]ABCDELevels:A<B<C<D<E
画图:
p_pie=ggplot(dat,aes(x="",y=dat[,2],fill=dat[,1]))+geom_bar(stat="identity",width=1)+coord_polar(theta="y",direction=1)+scale_fill_brewer(palette="Set3",direction=1)+labs(x="",y="",fill="Type")+ggtitle(label="test",subtitle=NULL)p_pie
结合下图结果可以看出坐标轴方向使顺时针,而颜色设置scale_fill_brewer(palette ="Set3",direction = 1) 设定了第一个颜色填充到第一个因子对应的“A”上,这样就反映出在图片实际分布中数据和因子是反向对应的。虽然在dat数据框中设置是顺序一致方向相同的对应,但图片分布中会改变。
结合图片中反向对应的关系,在A区块上填充上对应的文字Num:90,它的坐标因该是 sum(dat$Num)-90 +90/2,如果是B区块对应的应该坐标为sum(dat$Num)-90-34 +34/2
归纳为sum(dat$Num)-cumsum(dat$Num)+dat$Num/2
sum(dat$Num)-cumsum(dat$Num)+dat$Num/2[1]249.0187.0142.064.57.5
结合geom_text(aes(x,y))的位置设置,保证中间文字填写不会出错
p_pie=p_pie+geom_text(aes(x=1.2,y=sum(dat$Num)-cumsum(dat$Num)+dat$Num/2,label=as.character(dat[,2])),size=3)p_pie
##########################如果最初构建有序因子的方向和实际数据的方向反向对应呢?
dat$type=factor(dat$type,levels=rev(dat$type),order=T)dat$typep_pie=ggplot(dat,aes(x="",y=dat[,2],fill=dat[,1]))+geom_bar(stat="identity",width=1)+coord_polar(theta="y",direction=1)+scale_fill_brewer(palette="Set3",direction=1)+labs(x="",y="",fill="Type")+ggtitle(label="test",subtitle=NULL)p_pie
结合图片可以知道,第一个因子”E“对应了第一个颜色,不过可以看到,图片显示坐标中,"A"在前,而"A"在dat$Num中对应的数据也在前 90,这样计算位置就会发生改变了,90-90/2,”B”将对应90+34-34/2
归纳为cumsum(dat$Num)-dat$Num/2
cumsum(dat$Num)-dat$Num/2[1]45.0107.0152.0229.5286.5
而且图例也是反向的,需要结合guides(fill=guide_legend(reverse=T)) 并且希望第一个颜色对应最后一个因子“A",scale_fill_brewer(palette ="Set3",direction = -1)
dat$type=factor(dat$type,levels=rev(dat$type),order=T)dat$typep_pie=ggplot(dat,aes(x="",y=dat[,2],fill=dat[,1]))+geom_bar(stat="identity",width=1)+coord_polar(theta="y",direction=1)+scale_fill_brewer(palette="Set3",direction=-1)+labs(x="",y="",fill="Type")+ggtitle(label="test",subtitle=NULL)+guides(fill=guide_legend(reverse=T))+geom_text(aes(x=1.2,y=cumsum(dat$Num)-dat$Num/2,label=as.character(dat[,2])),size=3)p_pie
以上是“如何使用ggplot2绘制饼图pie”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
如何利用ggplot2绘制分组柱状图并进行组内分隔
如何利用ggplot2绘制分组柱状图并进行组内分隔这篇文章主要为大...
-
如何利用ggplot2绘制密度图
如何利用ggplot2绘制密度图这篇文章给大家分享的是有关如何利用...
-
如何使用ggplot2绘制堆叠柱状图
如何使用ggplot2绘制堆叠柱状图小编给大家分享一下如何使用gg...
-
ggplot2的theme参数怎么设置
ggplot2的theme参数怎么设置这篇“ggplot2的the...
-
ggplot2分面facet_grid调整坐标怎么设置
ggplot2分面facet_grid调整坐标怎么设置这篇文章主要...
-
ggplot2的主题函数有哪些
ggplot2的主题函数有哪些这篇“ggplot2的主题函数有哪些...
-
ggplot2怎么隐藏图例
ggplot2怎么隐藏图例本文小编为大家详细介绍“ggplot2怎...
-
ggplot2笛卡尔坐标系x、y轴怎么互换
ggplot2笛卡尔坐标系x、y轴怎么互换这篇文章主要介绍了ggp...
-
ggplot2怎么控制饼图中添加文字的位置
ggplot2怎么控制饼图中添加文字的位置这篇文章主要讲解了“gg...
-
ggplot2位置调整position实例分析