如何在plot_richness绘图中使用合并后的Wine_type分组值?
问题:绘图仍使用旧的分组值,未应用合并后的新分组?
你遇到的核心问题很明确:你修改的是单独导出的dat2数据框,但psdata.r这个phyloseq对象里的原始样本数据根本没被更新。plot_richness是直接读取phyloseq对象自带的sample_data,自然不会用到你在外部处理的dat2里的新分组。
下面是具体的解决步骤:
1. 将修改后的分组同步回phyloseq对象
你已经在dat2里生成了合并好的Project列,现在只需要把它替换回psdata.r的Wine_type字段即可:
# 把dat2里的新分组赋值给psdata.r的Wine_type sample_data(psdata.r)$Wine_type <- dat2$Project
或者更高效的方式:直接在phyloseq的样本数据上修改,省去单独创建dat2的步骤(还能避免你之前代码里重复替换的小问题,比如先把red改成Red再改成Redwine):
library(dplyr) # 需要加载dplyr来用case_when # 直接在phyloseq对象内修改分组 sample_data(psdata.r)$Wine_type <- case_when( grepl("water", sample_data(psdata.r)$Wine_type, ignore.case = TRUE) ~ "Water", grepl("white", sample_data(psdata.r)$Wine_type, ignore.case = TRUE) ~ "Whitewine", grepl("red", sample_data(psdata.r)$Wine_type, ignore.case = TRUE) ~ "Redwine", TRUE ~ sample_data(psdata.r)$Wine_type # 保留其他未匹配的原始分组 )
2. 验证修改是否生效
运行这条命令检查分组是否正确合并:
table(sample_data(psdata.r)$Wine_type)
输出应该能看到你想要的Redwine、Water、Whitewine这些统一后的分组。
3. 重新绘制图形
现在再运行你的绘图代码,就会使用更新后的分组了:
plot_richness(psdata.r, measures = c("Observed","Shannon"), x = "Wine_type", color = "SampleType") + geom_boxplot()
小提醒:以后处理phyloseq对象的样本数据时,记得所有修改都要同步回原对象,不然phyloseq不会自动识别外部的数据框哦。
内容的提问来源于stack exchange,提问作者Rasmus
相关产品推荐
相关产品推荐

