【R画图学习16.1】饼图1

饼图有时候看起来和堆积柱状图表达的效果类似,都是为了显示不同group的百分占比。只不过饼图好像看起来比柱状图看上去更清晰,整个图片填充比更高一些。

library(reshape2)

library(ggplot2)

我们还是用微生物的丰度占比作为测试数据,包含多个时间点的数据。

data <- read.table("phylum_top10.txt", sep = "\t", header=T)

data$Taxonomy <- factor(data$Taxonomy,levels=rev(data$Taxonomy))  #常规造作,设置为因子,按照想要的顺序排序

label <- paste(round(data$time1*100,2),"%",sep="")    #为了添加饼图上的label

ggplot(data,aes(x="",y=time1,fill=Taxonomy)) +

geom_bar(stat = "identity",color="white") +

#scale_fill_manual(values = rainbow(11)) +

coord_polar(theta = "y") +     #这行如果注释掉,就是常规的柱状图

theme(axis.text.x = element_blank(),

      axis.ticks = element_blank(),

      panel.grid = element_blank())+

labs(x = '', y = '', fill = 'Top10 Phylum')+

geom_text(aes(y= cumsum(time1)-time1/2, x= 1.6),label=label,size=3)  #主要为了添加label的位置

这就是一个常规的饼图

当然也可以用常见的pie和pie3D函数操作。

pie(data$time1,labels=paste(data$Taxonomy,label),col=rainbow(11))

legend(1.2,1,legend=data$Taxonomy,cex=0.9,pch=19,col=rainbow(11),inset=0.1)

也可以通过画3D的。

pie3D(data$time1,labels=label,col=rainbow(11))

如果我们画成并排的柱状图会是什么效果呢?我们可以试下:

ggplot(data, aes(x = Taxonomy, y = time1, fill = Taxonomy)) +

geom_bar(stat = 'identity', width = 1) +

scale_fill_manual(values = rainbow(11)) +

theme(panel.grid = element_blank(),

      panel.background = element_blank(),

      axis.text = element_blank(),

      axis.ticks = element_blank(),

      plot.title = element_text(hjust = 0.5)) +

labs(x = '', y = '', fill = 'Top10 Phylum')+

geom_text(aes(y= time1, x= Taxonomy),label=label,size=3)+

coord_polar(theta = "y")


这样子,我们就画了一个圆环图,每个环展示该样本中各细菌类别丰度组成。

那如果我们绘制多个样本的话,会是什么效果呢?

先利用我们前面讲过的堆积柱状图的方法。

time_all <- melt(data, id = 'Taxonomy')   #还是前面讲过的,变成短矩阵

ggplot(time_all, aes(variable, value, fill = Taxonomy)) +

geom_bar(stat = 'identity', width = 0.8) +

scale_fill_manual(values = rainbow(11))

ggplot(time_all, aes(variable, value, fill = Taxonomy)) +

geom_bar(stat = 'identity', width = 0.8) +

scale_fill_manual(values = rainbow(11)) +

labs(x = '', y = '', fill = 'Top10 Phylum') +

theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text.x = element_blank())+

coord_polar(theta = "y")

变完之后,就会变成多个环了,每个环代表不同样本的比例数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容