如何为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
相关产品推荐
相关产品推荐

