10分钟掌握microeco:从原始数据到发表级微生物相对丰度图全流程
你是否还在为微生物群落数据可视化而烦恼?尝试过多种工具却始终无法生成符合期刊要求的相对丰度图?本文将通过一个完整案例,展示如何使用microeco包在10分钟内从原始数据处理到绘制高质量分类群相对丰度图,解决分类群筛选、数据转换和多组比较可视化等核心痛点。
读完本文你将掌握:
- microtable对象的高效构建与数据清洗
- 灵活的分类群丰度筛选与转换技巧
- 4种主流相对丰度图(堆叠柱状图/热图/箱线图/冲积图)的绘制方法
- publication-ready图表的美化与导出技巧
一、microeco简介与环境准备
microeco(Microbial Community Ecology)是一个基于R语言的微生物群落数据分析包,旨在提供一站式微生物组数据分析解决方案。其核心优势在于:
- 统一的数据管理系统(microtable对象)
- 模块化的分析流程(转换-分析-可视化)
- publication-ready的图表输出
- 支持从OTU/ASV水平到种属水平的多级别分析
1.1 安装与加载
# 安装稳定版
install.packages("microeco")
# 或安装开发版
devtools::install_github("ChiLiubio/microeco")
# 加载必要包
library(microeco)
library(ggplot2)
library(RColorBrewer)
1.2 数据结构概览
microeco采用统一的microtable对象存储所有相关数据,其核心组件包括:
二、数据准备与microtable对象构建
2.1 数据来源与格式要求
microeco支持多种输入格式,典型的微生物组数据应包含:
- OTU/ASV丰度表(行为特征,列为样品)
- 样品信息表(包含分组等 metadata)
- 分类学注释表(包含各分类水平信息)
本文使用microeco内置的示例数据集,包含16S rRNA基因测序的土壤微生物数据:
# 加载内置数据集
data(dataset)
# 查看数据集结构
print(str(dataset))
2.2 构建microtable对象
# 从内置数据构建microtable对象
# dataset包含otu_table, sample_table, tax_table等组件
microtab <- dataset
# 或从外部文件构建(示例)
# otu_table <- read.csv("otu_table.csv", row.names = 1)
# sample_table <- read.csv("sample_table.csv", row.names = 1)
# tax_table <- read.csv("tax_table.csv", row.names = 1)
# microtab <- microtable$new(otu_table = otu_table,
# sample_table = sample_table,
# tax_table = tax_table)
2.3 数据预处理
# 数据清洗:移除线粒体和叶绿体序列
microtab$filter_pollution(taxa = c("mitochondria", "chloroplast"))
# 过滤低丰度特征:相对丰度<0.01%且出现频率<20%的OTU
microtab$filter_taxa(rel_abund = 0.0001, freq = 0.2)
# 计算各分类水平丰度(从门到属)
microtab$cal_abund()
# 查看可用的分类水平
print(names(microtab$taxa_abund))
三、trans_abund类:丰度转换与可视化核心
trans_abund类是microeco中负责分类群丰度转换和可视化的核心工具,其工作流程如下:
3.1 创建trans_abund对象
# 创建trans_abund对象,聚焦于门水平(Phylum)的前10个优势分类群
trans_obj <- trans_abund$new(dataset = microtab,
taxrank = "Phylum", # 分类水平
ntaxa = 10, # 选取前10个优势分类群
show = 0.01, # 平均相对丰度阈值(1%)
use_percentage = TRUE) # 以百分比显示
# 查看转换后的数据
head(trans_obj$data_abund)
关键参数说明:
| 参数 | 描述 | 示例 |
|---|---|---|
| taxrank | 分类水平(需与tax_table列名对应) | "Phylum", "Genus" |
| ntaxa | 选取的分类群数量 | 10(默认) |
| show | 平均相对丰度阈值 | 0.01(1%) |
| groupmean | 是否按组计算平均值 | "Group"(按Sample表中的Group列分组) |
| high_level | 更高分类水平(用于嵌套图例) | "Phylum"(在属水平图中显示门信息) |
四、四种主流相对丰度图绘制详解
4.1 堆叠柱状图(Stacked Bar Plot)
堆叠柱状图是展示不同样品/组中分类群相对丰度最常用的方法,特别适合比较组间差异。
# 基础堆叠柱状图(按Group分组)
p1 <- trans_obj$plot_bar(facet = "Group", # 按Group列分面
xtext_keep = FALSE, # 不显示x轴样品名
color_values = brewer.pal(10, "Paired"), # 颜色方案
bar_full = TRUE) # 包含"Others"类别使总和为100%
# 添加嵌套分类信息(需创建对象时指定high_level)
trans_obj2 <- trans_abund$new(dataset = microtab,
taxrank = "Genus", # 属水平
ntaxa = 15,
high_level = "Phylum") # 同时显示门水平信息
p2 <- trans_obj2$plot_bar(facet = "Group",
ggnested = TRUE, # 嵌套图例
high_level_add_other = TRUE) # 每个门添加Others
# 保存图表
ggsave("stacked_barplot.pdf", p1, width = 10, height = 6, dpi = 300)
关键参数与个性化设置
facet: 分面参数,可指定Sample表中的列名,支持多级分面(如c("Group", "Site"))order_x: 自定义x轴样品顺序,如order_x = c("S1", "S3", "S2")use_alluvium: 添加冲积图连接线,展示分类群在样品间的流动sample_plot: 添加样品属性热图,如sample_plot = c("pH", "Temperature")
# 高级示例:带样品属性热图的堆叠柱状图
p3 <- trans_obj$plot_bar(facet = "Group",
sample_plot = c("pH", "Organic_matter"), # 样品属性
sample_plot_color = list(pH = c("blue", "red"), # 颜色映射
Organic_matter = c("yellow", "brown")),
sample_plot_mainnames = FALSE) # 不在主图显示样品名
4.2 热图(Heatmap)
热图适合展示较多分类群在样品中的分布模式,常结合聚类分析展示样品或分类群间的相似性。
# 创建聚焦于属水平的trans_abund对象
trans_genus <- trans_abund$new(dataset = microtab,
taxrank = "Genus",
ntaxa = 30, # 更多分类群
show = 0.005) # 降低丰度阈值
# 基础热图
p_heatmap <- trans_genus$plot_heatmap(
facet = "Group", # 按Group分面
plot_colorscale = "log10", # 对数刻度(适合丰度差异大的数据)
xtext_angle = 45, # x轴标签旋转45度
color_values = rev(brewer.pal(11, "RdYlBu")), # 颜色方案
clustering = TRUE) # 样品聚类
# 保存热图
ggsave("heatmap.pdf", p_heatmap, width = 12, height = 10, dpi = 300)
热图高级应用
- 自定义聚类方法:
# 使用pheatmap包绘制热图(支持更多聚类选项)
p_pheatmap <- trans_genus$plot_heatmap(pheatmap = TRUE,
scale = "row", # 行标准化
treeheight_row = 10,
treeheight_col = 10)
- 结合系统发育关系:
# 需要先计算系统发育距离
microtab$cal_betadiv(method = "wunifrac")
# 在热图中按系统发育关系排序分类群
4.3 箱线图(Box Plot)
箱线图适合展示不同组别间特定分类群的丰度分布差异,便于统计比较。
# 选择特定分类群(如变形菌门Proteobacteria)
trans_specific <- trans_abund$new(dataset = microtab,
taxrank = "Phylum",
input_taxaname = "Proteobacteria") # 指定分类群名称
# 绘制箱线图
p_box <- trans_specific$plot_box(
group = "Group", # 分组列
add_jitter = TRUE, # 添加散点
jitter_width = 0.2,
fill_color = brewer.pal(5, "Set2"),
add_stat = TRUE, # 添加统计显著性标记
comparisons = list(c("CK", "N"), c("CK", "P"), c("N", "NP"))) # 比较组
# 保存箱线图
ggsave("boxplot.pdf", p_box, width = 8, height = 6, dpi = 300)
4.4 冲积图(Alluvial Plot)
冲积图(也称桑基图)适合展示分类群在不同分组/时间点之间的丰度流动和变化。
# 创建包含时间序列数据的trans_abund对象
# 假设Sample表中有Time列表示采样时间
trans_time <- trans_abund$new(dataset = microtab,
taxrank = "Phylum",
ntaxa = 8,
groupmean = "Time") # 按时间分组计算平均值
# 绘制冲积图
p_alluvium <- trans_time$plot_bar(use_alluvium = TRUE, # 启用冲积图模式
facet = "Group",
color_values = brewer.pal(8, "Set1"),
xtext_angle = 0)
# 保存冲积图
ggsave("alluvium_plot.pdf", p_alluvium, width = 12, height = 8, dpi = 300)
五、图表美化与个性化调整
5.1 颜色方案优化
# 自定义颜色向量
my_colors <- c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF")
# 应用于图表
p <- trans_obj$plot_bar(color_values = my_colors,
others_color = "grey80") # "Others"类颜色
5.2 字体与标签调整
# 统一设置中文字体(解决中文显示问题)
theme_set(theme_bw(base_family = "SimHei"))
# 调整标签和标题
p <- p + labs(title = "不同处理组的微生物群落组成(门水平)",
x = "处理组",
y = "相对丰度 (%)",
fill = "门水平分类群") +
theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
axis.title = element_text(size = 14))
5.3 多图组合
library(patchwork)
# 组合不同图表
combined_plot <- p1 + p_heatmap + plot_layout(ncol = 1, heights = c(1, 1.5))
# 添加共同标题
combined_plot + plot_annotation(title = "微生物群落组成分析",
theme = theme(plot.title = element_text(hjust = 0.5, size = 18)))
六、案例:从原始数据到发表级图表的完整流程
以下是一个从原始OTU表开始,到生成发表级相对丰度图的完整案例:
# 1. 加载数据并创建microtable对象
otu_table <- read.csv("otu_table.csv", row.names = 1)
sample_table <- read.csv("sample_table.csv", row.names = 1)
tax_table <- read.csv("tax_table.csv", row.names = 1)
microtab <- microtable$new(otu_table = otu_table,
sample_table = sample_table,
tax_table = tax_table,
auto_tidy = TRUE)
# 2. 数据预处理
microtab$filter_pollution(taxa = c("mitochondria", "chloroplast")) # 移除污染序列
microtab$filter_taxa(rel_abund = 0.001, freq = 0.2) # 过滤低丰度和低出现频率OTU
microtab$rarefy_samples(sample.size = min(microtab$sample_sums())) # 稀释至最小测序深度
microtab$cal_abund() # 计算各分类水平丰度
# 3. 创建trans_abund对象(属水平,显示门水平信息)
trans_genus <- trans_abund$new(dataset = microtab,
taxrank = "Genus",
ntaxa = 15,
high_level = "Phylum", # 嵌套门水平信息
groupmean = "Group") # 按组计算平均值
# 4. 绘制嵌套图例的堆叠柱状图
p_final <- trans_genus$plot_bar(facet = "Group",
ggnested = TRUE, # 嵌套图例
color_values = colorRampPalette(brewer.pal(12, "Paired"))(15),
xtext_keep = FALSE,
barwidth = 0.7) +
theme(legend.key.size = unit(0.8, "cm"),
legend.text = element_text(size = 10),
strip.text = element_text(size = 12))
# 5. 保存高清图表
ggsave("final_figure.pdf", p_final, width = 10, height = 7, dpi = 600)
ggsave("final_figure.png", p_final, width = 10, height = 7, dpi = 600)
七、常见问题与解决方案
7.1 数据格式问题
问题:创建microtable对象时出现"样本名不匹配"错误
解决方案:
# 确保otu_table列名与sample_table行名一致
common_samples <- intersect(colnames(microtab$otu_table), rownames(microtab$sample_table))
microtab$otu_table <- microtab$otu_table[, common_samples]
microtab$sample_table <- microtab$sample_table[common_samples, ]
microtab$tidy_dataset() # 自动整理数据
7.2 分类群名称问题
问题:分类群名称包含"__"前缀(如"g__Lactobacillus")
解决方案:
# 创建trans_abund对象时自动移除前缀
trans_obj <- trans_abund$new(dataset = microtab,
taxrank = "Genus",
delete_taxonomy_prefix = TRUE, # 移除前缀
prefix = "g__") # 指定前缀模式
7.3 图表美化问题
问题:中文标签显示为乱码
解决方案:
# 设置中文字体
library(showtext)
showtext_auto(enable = TRUE)
font_add("SimHei", "SimHei.ttf") # 添加系统中的中文字体
theme_set(theme_bw(base_family = "SimHei"))
八、总结与进阶学习
本文详细介绍了使用microeco包绘制微生物相对丰度图的完整流程,包括数据准备、对象创建、图表绘制和美化。通过掌握这些技能,你可以快速生成符合发表要求的微生物群落组成可视化结果。
进阶学习资源:
-
官方文档与教程:
-
高级分析功能:
- 功能预测(trans_func)
- 网络分析(trans_network)
- 差异分析(trans_diff)
-
扩展应用:
- 结合ggplot2进行深度自定义
- 多组学数据整合分析
- 时空动态分析与建模
希望本文能帮助你更高效地进行微生物群落数据分析与可视化。如有任何问题,欢迎在GitHub仓库提交issue或参与讨论。
提示:本文代码已在microeco v0.17.0版本测试通过。不同版本间可能存在参数差异,请参考对应版本的官方文档。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



