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

如何为Phyloseq绘制的箱线图按自定义调色板给变量填充颜色

问题原因

你现有代码的核心问题出在geom_boxplot的映射语法:在aes()内传入带引号的'System'会被ggplot识别为固定字符串常量,而非样本元数据中的System分类变量,因此无法按分组匹配填充色,也不能对应自定义调色板的顺序。

修正方案

直接调整映射逻辑,同时给自定义调色板绑定分组名称,确保颜色和分组一一对应:

library(ggplot2)
library(phyloseq)

# 给调色板绑定System分组的因子水平,严格匹配你需要的颜色顺序
palette <- setNames(
  c("#B0F2E7", "#166AD0", "#F89EE9", "#DA0000", "#C6C3D3", "#23202C"),
  levels(physeq_shime@sam_data$System)
)

# 生成绘图对象
p <- plot_richness(physeq_shime, x='System', measures='Shannon') + 
  theme_bw() + 
  xlab('SHIME') + 
  scale_y_continuous(limits=c(2.0,3.2)) + 
  # 正确映射fill为System分组变量,不要加引号,alpha参数可按需调整透明度
  geom_boxplot(aes(fill = System), alpha = 0.8) +
  # 加载自定义调色板
  scale_fill_manual(values = palette)

# 可选:如果不需要plot_richness默认生成的散点,取消注释下行即可
# p$layers[[1]] <- NULL

p

补充说明

如果你的System变量还没有设置因子顺序,可以先执行以下代码自定义分组顺序,再运行上述绘图代码:

sample_data(physeq_shime)$System <- factor(
  sample_data(physeq_shime)$System,
  levels = c("你需要的分组1", "你需要的分组2", "你需要的分组3", "你需要的分组4", "你需要的分组5", "你需要的分组6")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:03