跟着iMeta学做图|用三元图展示微生物种群相对丰度

本文展示了如何使用R包ggtern和amplicon复现微生物相对丰度的三元相图,通过处理数据、计算相对丰度和选择高丰度门,最终绘制出信息丰富的三元图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文代码已经上传至https://github.com/iMetaScience/iMetaPlot230125ternary 如果你使用本代码,请引用:Chenyuan Dang. 2022. Microorganisms as bio‐filters to mitigate greenhouse gas emissions from high‐altitude permafrost revealed by nanopore‐based metagenomics. iMeta 1: e24 https://doi.org/10.1002/imt2.24

代码编写及注释:农心生信工作室

写在前面

三元相图 (Ternary plot) 可以展示三个变量的关系,既美观且信息更加丰富,在微生物领域常用于比较多个样品的丰度信息。本期我们挑选刊登在iMeta上的Microorganisms as bio‐filters to mitigate greenhouse gas emissions from high‐altitude permafrost revealed by nanopore‐based metagenomics.论文的Figure 2A进行复现,基于ggtern绘制三元图,先上原图:

dc249a1fc10809fc93701432e934f4c5.gif

5c65dc36c461a33c612998158a423857.jpeg

接下来,我们将通过详尽的代码逐步拆解原图,最终实现对原图的复现。

R包检测和安装

01

安装核心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)

读取数据及数据处理

02

使用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") # 对列重命名

03

保留相对丰度较高的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)

绘图预览

04

使用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)

315ad20574ca36743c6be0ca01efcb32.png

完整代码

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)


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") # 对列重命名


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)


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)

以上数据和代码仅供大家参考,如有不完善之处,欢迎大家指正!

更多推荐

(▼ 点击跳转)

高引文章 ▸▸▸▸

iMeta | 德国国家肿瘤中心顾祖光发表复杂热图(ComplexHeatmap)可视化方法

257c8371f8ce347cb114f667e22b963c.png

▸▸▸▸

iMeta | 浙大倪艳组MetOrigin实现代谢物溯源和肠道微生物组与代谢组整合分析

7a3e8a8fd52ba4ab1cd0d6dd4ec2fb94.png

▸▸▸▸

iMeta | 高颜值绘图网站imageGP+视频教程合集                                         

df41a312631a7ef1902d85fcf6663a34.png

3ba8b7e2c09a0ce7d5c485f5852afc3f.jpeg

第1卷第1期

c3630023efd0f880ed38d8b0dc16afc2.jpeg

第1卷第2期

62353da4b22f15e0a9c731570b7783d7.jpeg

第1卷第3期

7b2b07a7d6d504800aae8c5030aa1c3f.jpeg

第1卷第4期

期刊简介

“iMeta” 是由威立、肠菌分会和本领域数百位华人科学家合作出版的开放获取期刊,主编由中科院微生物所刘双江研究员和荷兰格罗宁根大学傅静远教授担任。目的是发表原创研究、方法和综述以促进宏基因组学、微生物组和生物信息学发展。目标是发表前10%(IF > 15)的高影响力论文。期刊特色包括视频投稿、可重复分析、图片打磨、青年编委、前3年免出版费、50万用户的社交媒体宣传等。2022年2月正式创刊发行!

联系我们

iMeta主页:http://www.imeta.science

出版社:https://onlinelibrary.wiley.com/journal/2770596x
投稿:https://mc.manuscriptcentral.com/imeta
邮箱:office@imeta.science

### 微生物相对丰度分析中的 PCoA 和置换多元方差分析 #### 使用 R 进行 PCoA 和 PERMANOVA 的代码示例 R 是一种强大的统计编程语言,在微生物组数据分析中广泛使用。以下是基于 `vegan` 包实现 PCoA 和 PERMANOVA 的代码: ```r library(vegan) # 加载数据 data <- read.csv("microbiome_data.csv", row.names = 1) # 替换为实际文件名 metadata <- read.csv("metadata.csv") # 替换为实际元数据文件名 # 距离矩阵计算 (Bray-Curtis 或其他距离) distance_matrix <- vegdist(data, method = "bray") # 主坐标分析 (PCoA) pcoa_result <- cmdscale(distance_matrix, k = 2, eig = TRUE) # 可视化 PCoA 结果 plot(pcoa_result$points[, 1], pcoa_result$points[, 2], col = as.numeric(metadata$Group), # 根据分组着色 pch = 19, xlab = "PCoA1", ylab = "PCoA2", main = "Principal Coordinates Analysis (PCoA)") legend("topright", legend = levels(as.factor(metadata$Group)), fill = unique(col)) # 置换多元方差分析 (PERMANOVA) permanova_result <- adonis2(distance_matrix ~ metadata$Group, permutations = 999) print(permanova_result) ``` 上述代码展示了如何通过 `cmdscale()` 函数执行主坐标分析,并利用 `adonis2()` 函数完成置换多元方差分析[^1]。 --- #### 使用 Python 实现 PCoA 和 PERMANOVA 的代码示例 Python 中可以借助 `scikit-bio` 和 `statsmodels` 库来实现类似的分析过程: ```python import pandas as pd from skbio.stats.distance import permanova, pcoa from scipy.spatial.distance import braycurtis # 数据加载 data = pd.read_csv('microbiome_data.csv', index_col=0) # 替换为实际文件名 metadata = pd.read_csv('metadata.csv') # 替换为实际元数据文件名 # 计算 Bray-Curtis 距离矩阵 def pairwise_bray_curtis(matrix): samples = matrix.index.tolist() distance_matrix = [] for i in range(len(samples)): row_distances = [ braycurtis(matrix.loc[samples[i]], matrix.loc[samples[j]]) for j in range(i + 1)] distance_matrix.append(row_distances) return pd.DataFrame(distance_matrix, columns=samples[:-len(distance_matrix)-1:-1]) dm = pairwise_bray_curtis(data) # 执行 PCoA pcoa_results = pcoa(dm) fig = pcoa_results.plot( title="Principal Coordinates Analysis (PCoA)", axis_labels=["PCoA1", "PCoA2"], s=50, cmap='Set3', labels=list(metadata['Group'])) # PERMANOVA 分析 group_column_name = 'Group' # 替换为实际列名 permanova_results = permanova(dm, group_metadata=metadata[group_column_name]) print(permanova_results) ``` 以上代码实现了基于 `skbio` 的 PCoA 绘制以及 PERMANOVA 显著性检验。 --- ### 注意事项 - **输入数据格式**:确保输入的数据是以样本作为行、特征(OTU/ASV)作为列的表格形式。 - **标准化处理**:在进行距离矩阵计算之前,通常需要对原始计数数据进行标准化或转换(如 CLR 转换),以减少稀疏性和零膨胀的影响。 - **可视化优化**:可以通过调整颜色映射、形状标记等方式增强 PCoA 表的表现力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值