【R画图学习14.2】堆叠面积图

2022-11-15  本文已影响0人  jjjscuedu

先前提到堆叠柱形图展示群落物种丰度以及细胞比例变化等等。与此相较,堆叠面积图是另一种可视化选择,特别是在大样本情形(此时柱状图不便展示很多的样本或分组数量)或者涉及“时间序列”的情形中。如下面的例子。所以在上次面积图的基础上,我们学习堆叠面积图的画法。

我们还是用一组微生物峰度数据作为测试数据。这组测试数据包含40多个微生物门类的峰度数据。

library(reshape2)

library(ggplot2)

phylum <- read.table("phylum_table.txt", row.names = 1, sep = "\t",header=T)

因为显示40多个不显示,所以我们挑选top 10的highlight,其余的作为others。

下面我们就按峰度加和排序。

phylum$sum <- rowSums(phylum)

phylum <- phylum[order(phylum$sum, decreasing = TRUE),]

phylum_top10 <- phylum[1:10, -ncol(phylum)]  //选取前10行,除去最后一列的所有列

phylum_top10['Others', ] <- 1 - colSums(phylum_top10)  //添加一行Others,值为1-列的总和。

下面我们load进去每个sample的时间点特征。为啥用时间点,不用sample。是因为在ggplot2中,由于堆叠面积图类似于折线图的延伸样式,因此横坐标必须为数值类型才能被识别,不可为因子或字符类型,不然不会出图。所以如果我们横轴设置为sample的话,是一个字符型,是不会出图的。

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

然后把时间点特征通过merge函数和我们的峰度矩阵合并。

merge(x, y, by = intersect(names(x), names(y)),by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,sort= TRUE, suffixes = c(".x",".y"),incomparables = NULL, ...)

merge函数参数的说明如下:

x,y:用于合并的两个数据框

by,by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列.

all,all.x,all.y:指定x和y的行是否应该全在输出文件.

sort:by指定的列是否要排序.

suffixes:指定除by外相同列名的后缀.

incomparables:指定by中哪些单元不进行合并.

phylum_top10 <- merge(phylum_top10, group, by = 'sample', all.x = TRUE)

下面,我们就可以画堆积面积图了。

ggplot(phylum_top10, aes(x = times, y = 100*value, fill = Taxonomy)) +

geom_area() +

labs(x = 'Times', y = 'Relative Abundance(%)', title = '', fill = 'Top10 Phylum')

我们再来调整一下色系和布局等等。

ggplot(phylum_top10, aes(x = times, y = 100*value, fill = Taxonomy)) +

geom_area() +

labs(x = 'Times', y = 'Relative Abundance(%)', title = '', fill = 'Top10 Phylum')+

scale_fill_manual(values = c('gray', 'skyblue', 'burlywood1', 'purple', 'cyan', 'hotpink', 'red', 'yellow', 'green', 'orange', 'blue')) + #设置颜色

theme(panel.grid = element_blank(),    #去除网格线

            panel.background = element_rect(color = 'black', fill = 'transparent')) + #调整背景

scale_x_continuous(breaks = 1:15, labels = as.character(1:15), expand = c(0, 0)) + #调整坐标轴轴刻度

scale_y_continuous(expand = c(0, 0))  #去除上下的留白

但是我们又测试了一个参数group。

ggplot(phylum_top10,aes(x = sample,y =100*value,group=Taxonomy,fill = Taxonomy))+

#stat_summary(geom = 'line',fun='mean',cex=1,col='white')+

geom_area(data =phylum_top10,aes(fill=Taxonomy))+

labs(x = 'Times', y = 'Relative Abundance(%)', title = '', fill = 'Top10 Phylum')+

scale_fill_manual(values = c('gray', 'skyblue', 'burlywood1', 'purple', 'cyan', 'hotpink', 'red', 'yellow', 'green', 'orange', 'blue')) + #设置颜色

theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent')) + #调整背景

scale_y_continuous(expand = c(0, 0))

这次就可以用sample正常显示了。我还没搞清楚具体的原因和逻辑,囧。

上一篇下一篇

猜你喜欢

热点阅读