You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用phyloseq对象实现堆叠柱状图仅特定类群着色其余为灰色

基于phyloseq对象绘制单类群高亮堆叠柱状图实现方案

前置准备

首先加载所需依赖包:

library(phyloseq)
library(ggplot2)
library(dplyr)

核心适配逻辑

你原来的工作流可以直接对接phyloseq的psmelt()函数,该函数会自动将phyloseq对象中的OTU表、分类表、样本元数据合并为长格式数据框,和你原来使用的pig_df结构完全兼容。同时为了保证所有图的类群顺序一致,我们提前固定分类列的因子水平即可。

完整可复用代码

步骤1:从phyloseq生成统一长表并固定类群顺序

# 替换为你自己的phyloseq对象
ps <- your_phyloseq_object

# 合并为长表,这里以门水平为例,如需其他层级替换Phylum为对应分类等级即可
ps_long <- psmelt(ps)

# 提前固定所有类群的排序,保证所有绘图顺序一致,OTHER统一放在最后
all_phyla <- sort(unique(ps_long$Phylum))
fixed_levels <- c(all_phyla, "OTHER")
ps_long$Phylum <- factor(ps_long$Phylum, levels = fixed_levels)

步骤2:封装绘图函数(支持批量生成多张图)

plot_highlight_taxa <- function(data, highlight_taxa, highlight_color = "blue") {
  # 复制数据避免修改原表
  plot_data <- data
  # 非目标类群统一归为OTHER
  plot_data$Phylum[!plot_data$Phylum %in% highlight_taxa] <- "OTHER"
  
  # 配置调色板
  n_levels <- length(unique(plot_data$Phylum))
  colors <- rep("#808080", n_levels) # 非目标类群统一灰色
  colors[match(highlight_taxa, levels(plot_data$Phylum))] <- highlight_color
  
  # 绘图
  p <- ggplot(plot_data, aes(x = Sample, y = Abundance, fill = Phylum)) +
    geom_bar(position = "stack", stat = "identity") +
    scale_fill_manual(values = colors, drop = FALSE) + # drop=FALSE保证类群顺序不丢失
    theme(legend.text = element_text(size = 14))
  return(p)
}

步骤3:调用函数生成图片

# 高亮Firmicutes的图
p_firmicutes <- plot_highlight_taxa(ps_long, highlight_taxa = "p__Firmicutes")
print(p_firmicutes)

# 高亮Bacteroidetes的图
p_bactero <- plot_highlight_taxa(ps_long, highlight_taxa = "p__Bacteroidetes", highlight_color = "red")
print(p_bactero)

# 如需批量生成所有类群的高亮图,直接循环调用即可

注意事项

  • 如果你需要按样本分组(比如按处理组合并样本绘制平均丰度),可以在psmelt之后用dplyr::group_by()先做分组聚合再传入绘图函数
  • 分类层级可灵活切换:将代码中所有Phylum替换为Family/Genus等你需要的分类等级即可
  • 如果需要调整类群排序,修改步骤1中fixed_levels的顺序即可,所有生成的图片都会沿用该顺序

内容的提问来源于stack exchange,提问作者Haley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:27:03