ggplot2 | 如何将菌群分类数据作面积图

导读

  • 菌群分类数据的可视化,包括丰度在个体之间以以及组间的一个比较怎么生动形象,一直是我想解决的问题,今天看到一篇文章上面用的是ggplot2包做的一个面积图,主要利用到了里面的geom_area()函数,这样的图有一个好处就是可以看菌群丰度随着采样时间点的变化而变化。那么我在想,如果横坐标是个体号呢,怎么想办法也能像下图(图1)这样展示。所以我想通过自己平时下载的数据来重现这个图。好了,话不多说,开始作图!


    ggplot2 | 如何将菌群分类数据作面积图_第1张图片
    图1

作图流程

文件准备

  • 这里用到的是R包Rhea里构建的数据,用的是科水平,数据如图(图2)如下:

这个表的行名为科水平分类名,列名为样品名,但是表格的具体形式不一定要和我的一致,行列随意,反正可以随意转置


ggplot2 | 如何将菌群分类数据作面积图_第2张图片
图2 行名为科水平分类名,列名为样品名

R代码

rm(list = ls()) 
# 加载系列包
library(reshape2) 
library(ggplot2)
library(phyloseq)
library(magrittr)

# 加载数据
setwd("D:\\元基因组\\3. 16S 扩增子下游测序分析&其他分析方法集锦\\Rhea_amplicon_analysis\\4.Taxonomic-Binning")
otu_file<-"Families.all.tab"
otu_table <-  read.table (otu_file,
                          check.names = FALSE,
                          header = TRUE,
                          dec = ".",
                          sep = "\t",
                          comment.char = "")
otu_table <- otu_table[1:10,] # 为了展示方便,这里只取前面10个科
otu_table[,2:ncol(otu_table)] <- sweep(otu_table[,2:ncol(otu_table)],2, colSums(otu_table[,2:ncol(otu_table)]),'/')*100
col <- c("f__Bacteroidaceae" = "#E5CD34", "f__Deferribacteraceae" = "#6C6011", 
         "f__Desulfovibrionaceae" = "#2B5B51", "f__Enterobacteriaceae" = "#1D9376", "f__Erysipelotrichaceae" = "#A3E4D5", 
         "f__Lachnospiraceae" = "#4D2599", "f__Lactobacillaceae" = "#1E0748", "f__Peptostreptococcaceae" = "#9C74E3", 
         "f__Porphyromonadaceae" = "#6B2B0B", "f__Rikenellaceae" = "#E46628")

# 将原始数据表进行转换,将宽矩阵转为长矩阵
otu_table_1 <- melt(otu_table)
names(otu_table_1)[1] <- "family"
otu_table_1$variable <- as.factor(otu_table_1$variable)

p <- ggplot(otu_table_1,aes(x=variable, y = value)) +
  geom_area(aes(group=family, fill = family),position = "stack") + ##这里要添加group和fill,不然个体之间连接不成面积图,而是和条形图差不多。并且要选择stack是堆砌图。
  #facet_wrap(~vessel) +
  theme_minimal() +
  scale_fill_manual(values = col) +
  #scale_x_datetime(date_labels="Day %d") +
  ylab("Proportions") +
  #guides(fill = element_text(size=16))+
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        legend.position="bottom", 
        axis.title.x = element_blank(), 
        axis.text.x = element_text(angle=45,color="black",vjust = 0.95,hjust = 0.95,size=12), 
        axis.title.y = element_text(size=16),
        axis.text.y = element_text(size=14), 
        strip.text.x = element_text(size=18), 
        legend.text = element_text(size=14), 
        legend.title = element_text(size=16))
ggsave("family.tiff", height=8, width=20, units="in")

结果展示

  • 结果展示如下图所示(图3)


    ggplot2 | 如何将菌群分类数据作面积图_第3张图片
    图3 结果图

你可能感兴趣的:(ggplot2 | 如何将菌群分类数据作面积图)