生信小木屋

图片来源

三元相图 (Ternary plot) 可以展示三个变量的关系,既美观且信息更加丰富,在微生物领域常用于比较多个样品的丰度信息。

安装核心R包ggtern以及一些功能辅助性R包,并载入所有R包

options(repos = list(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
if (!require("devtools"))
  install.packages('devtools') 
if (!require("ggtern"))
  install.packages('ggtern')
install.packages("devtools")
devtools::install_github("microbiota/amplicon")
# 加载包
library(amplicon)
library(ggtern)

使用R包amplicon中的示例数据tax_phylum并计算相对丰度

dim(tax_phylum) # 查看数据维度,共3个样品各6个重复共18列数据
#> [1] 18 19

rela_tax <- apply(tax_phylum, 2, function(x) x/sum(x)) # 绝对丰度/对每一列的丰度总和得到每个物种的相对丰度

rela_group_tax <- t(apply(rela_tax, 1, function(x) c(mean(x[1:6]), mean(x[7:12]), mean(x[13:18])))) # 对每个样品的6个重复计算相对丰度均值
colnames(rela_group_tax) <- c('KO', "OE", "WT") # 对列重命名

保留相对丰度较高的10个门,合并其余门的相对丰度

df <- as.data.frame(rela_group_tax)
df$total <- rowSums(df) # 对每个门额外计算一列总相对丰度用于选出高丰度的门
sort_df <- df[order(df$total, decreasing = T), ] # 得到排序后的数据框

others <- colSums(sort_df[11:nrow(df), ]) # 计算其他低丰度门的丰度总和
df2 <- rbind(sort_df[1:10, ], others) # 合并表格

# 计算丰度并添加分组,分别代表三元图中点的大小和颜色
df2$Abundance <- rowMeans(df2) 
gp <- c(rownames(df2)[1:10], "Others")
df2$Phylum <- factor(gp, level = gp)

使用ggtern包绘制群落丰度三元图:

p <- ggtern(data = df2, aes(KO, OE, WT)) + geom_point(aes(color = Phylum, size = Abundance)) +  theme_bw() +  theme_arrowdefault()
ggsave('ternay.png', p, width = 10, height = 8)

代码: https://github.com/iMetaScience/iMetaPlot230125ternary
参考: https://mp.weixin.qq.com/s/B0dA8qIHkJfAstd3qGBOPA