vlambda博客
学习文章列表

R语言绘制堆叠面积图示例

ggplot2绘制物种丰度堆叠面积图示例
R语言绘制堆叠面积图示例
    先前提到展示群落物种丰度,与此相较,堆叠面积图是另一种可视化选择,特别是在大样本情形(此时柱状图不便展示很多的样本或分组数量)或者涉及“时间序列”的情形中。 如下示例,使用堆叠面积图展示了(水稻)不同生长时期下,生长在两种土壤环境中的2种品种的水稻根系的细菌群落及其所处土壤的细菌群落的(主要的门纲)丰度组成的变化。

R语言绘制堆叠面积图示例

   

    本篇将同样通过这类物种丰度堆叠面积图,简要展示使用R包ggplot2中绘制堆叠面积图的一个示例。

    本文使用的作图数据的网盘链接(提取码 rtko):

    https://pan.baidu.com/s/1PtTKKvtrQ3V0qt1w6K-HjA

    文件“phylum_top10.csv”由16S高通量测序所得的物种丰度表转化而来,展示了主要细菌类群(行)在各样本(列)中的丰度信息。


R语言绘制堆叠面积图示例

ggplot2绘制堆叠面积图

  

    我们将使用堆叠面积图展示示例数据的12个样本中细菌类群的丰度组成及其时间演替趋势。

library(reshape2)
library(ggplot2)

#读取数据
phylum_top10 <- read.csv('phylum_top10.csv', row.names = 1, stringsAsFactors = FALSE, check.names = FALSE)

#重排表格为 ggplot2 作图样式,借助 reshape2 包 melt() 实现
phylum_top10$Taxonomy <- factor(rownames(phylum_top10), levels = rev(rownames(phylum_top10)))
phylum_top10 <- melt(phylum_top10, id = 'Taxonomy')
names(phylum_top10)[2] <- 'sample'

#合并分组信息,添加时间序列
group <- read.delim('group.txt', sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)
phylum_top10 <- merge(phylum_top10, group, by = 'sample', all.x = TRUE)

##ggplot2 堆叠面积图
p <- ggplot(phylum_top10, aes(x = times, y = 100 * value, fill = Taxonomy)) +
geom_area(color = 'black') +
scale_fill_manual(values = c('gray', '#CCEBC5', '#BC80BD', '#FCCDE5', '#B3DE69', '#FDB462', '#80B1D3', '#FB8072', '#BEBADA', '#FFFFB3', '#8DD3C7')) +
theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent')) +
labs(x = 'Times', y = 'Relative Abundance(%)', title = '', fill = 'Top10 Phylum') +
scale_x_continuous(breaks = 1:15, labels = as.character(1:15), expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0))

#ggsave('ggplot2_area.pdf', p, width = 8, height = 5)
ggsave('ggplot2_area.png', p, width = 8, height = 5)

    特别注意,在ggplot2中,由于堆叠面积图类似于折线图的延伸样式,因此横坐标必须为数值类型才能被识别,不可为因子或字符类型,不然不会出图。


    以上仅通过一个简单示例,初步展示该图的作法。对于更复杂的类型,还需大家多多自行练习了。

我就知道你在看