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

phyloseq包plot_ordination绘图形状重复及填充失效问题求助

解决phyloseq中plot_ordination绘制PCoA图的形状重复与填充问题

1. 修复形状重复绘制的问题

你的代码里重复调用了geom_point()——plot_ordination()函数默认已经添加了一层点图层,再次叠加geom_point()会导致同一个样本点被绘制两次,出现大小不一的视觉效果。直接移除额外的geom_point()即可解决:

ord_bc_pcoa <- ordinate(physeq, method="PCoA", distance="bray")

pcoa_plot_1 <- plot_ordination(physeq, ord_bc_pcoa, color="variable1", shape="variable2") + 
    scale_color_manual(values = c("var1X"="red","var1Y"="#55BE25","var1Z"="blue")) +
    # 修正原代码中重复的var2D和拼写错误的varF
    scale_shape_manual(values = c("var2A"=0,"var2B"=2,"var2C"=3,"var2D"=4,"var2E"=5,"var2F"=6,"var2G"=7,"var2H"=8)) +
    ggtitle("title1")
pcoa_plot_1

2. 解决填充形状无法正常填充的问题

phyloseq的plot_ordination()默认仅映射color到点的轮廓颜色,带填充的形状(如代码21-25)需要单独指定fill映射,并配合scale_fill_manual设置填充色:

pcoa_plot_fill <- plot_ordination(physeq, ord_bc_pcoa, color="variable1", shape="variable2", fill="variable1") + 
    # 设置点的轮廓颜色(可统一为黑色增强区分度)
    scale_color_manual(values = c("var1X"="black","var1Y"="black","var1Z"="black")) +
    # 设置填充色
    scale_fill_manual(values = c("var1X"="red","var1Y"="#55BE25","var1Z"="blue")) +
    # 选用支持填充的形状代码(21-25均为带填充的形状)
    scale_shape_manual(values = c("var2A"=22,"var2B"=23,"var2C"=24,"var2D"=25,"var2E"=21,"var2F"=22,"var2G"=23,"var2H"=24)) +
    ggtitle("PCoA (Bray-Curtis) with filled shapes") +
    theme_bw()
pcoa_plot_fill

若需要用不同变量控制填充和轮廓颜色,只需将fill参数替换为对应的分组变量即可。

3. 完全可控的替代方案:手动提取坐标用ggplot2绘图

如果phyloseq的封装函数限制过多,可以直接从PCoA结果中提取坐标,结合样本元数据手动绘图,实现100%自定义:

# 提取PCoA前两轴的坐标
pcoa_df <- as.data.frame(ord_bc_pcoa$vectors[,1:2])
colnames(pcoa_df) <- c("PC1", "PC2")
# 合并样本元数据
pcoa_df <- cbind(pcoa_df, sample_data(physeq))

# 用ggplot2手动绘制
library(ggplot2)
ggplot(pcoa_df, aes(x=PC1, y=PC2, color=variable1, shape=variable2, fill=variable1)) +
    geom_point(size=4) +
    scale_color_manual(values = c("var1X"="black","var1Y"="black","var1Z"="black")) +
    scale_fill_manual(values = c("var1X"="red","var1Y"="#55BE25","var1Z"="blue")) +
    scale_shape_manual(values = c("var2A"=22,"var2B"=23,"var2C"=24,"var2D"=25,"var2E"=21,"var2F"=22,"var2G"=23,"var2H"=24)) +
    ggtitle("title1") +
    theme_bw() +
    # 添加轴标签,包含解释率
    labs(x=paste0("PC1 (", round(ord_bc_pcoa$values$Relative_eig[1]*100,1), "%)"),
         y=paste0("PC2 (", round(ord_bc_pcoa$values$Relative_eig[2]*100,1), "%)"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:52:44