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

求助:如何用ordiplot3d为Phyloseq的3D NMDS排序图按分组着色

3D NMDS 按分组着色的简易解决方案(Phyloseq + rgl)

嘿,我刚好碰到过类似的情况,ordiplot3d 确实在结合 phyloseq 元数据做分组着色这块不够灵活,给你个简单直接的方案——我们先拿到 NMDS 排序结果,再用 rgl 包的底层绘图函数手动控制颜色,完全适配你的需求:

步骤1:准备工作(加载包+生成3D NMDS结果)

首先确保你装了需要的包,然后从 phyloseq 对象生成3维 NMDS 排序:

library(phyloseq)
library(vegan)
library(rgl)
library(RColorBrewer) # 可选,用来生成好看的分组色

# 假设你的 phyloseq 对象名为 ps,替换成你自己的对象名
# 生成3D NMDS,k=3指定3维,distance选你需要的距离(比如bray)
nmds_3d <- ordinate(ps, method = "NMDS", k = 3, distance = "bray")

步骤2:提取坐标和分组信息

从排序结果里拿出样本的坐标,同时提取元数据里的分组变量:

# 提取样本的NMDS坐标
sample_coords <- scores(nmds_3d, display = "sites")

# 提取元数据中的分组列,比如你的分组列叫"Group",替换成你实际的列名
sample_groups <- sample_data(ps)$Group

# 给每个分组分配颜色(这里用RColorBrewer的Set1调色板,也可以自己指定颜色)
group_colors <- brewer.pal(length(unique(sample_groups)), "Set1")
names(group_colors) <- unique(sample_groups)

步骤3:绘制带分组颜色的3D NMDS

用 rgl::plot3d 直接绘图,指定颜色为分组对应的颜色:

# 绘制3D散点图,type="s"是球体(更显眼),也可以用"p"显示普通点
plot3d(
  sample_coords[, 1], sample_coords[, 2], sample_coords[, 3],
  col = group_colors[sample_groups], # 按分组着色
  size = 5, type = "s",
  xlab = "NMDS1", ylab = "NMDS2", zlab = "NMDS3",
  main = "3D NMDS (Grouped by Metadata)"
)

# 添加图例,方便区分分组
legend3d(
  "topright",
  legend = unique(sample_groups),
  col = group_colors,
  pch = 16, # 对应点的形状
  cex = 0.8
)

为什么这个方案好用?

ordiplot3d 是 vegan 里的封装函数,对 phyloseq 的元数据支持不够直观。而手动提取坐标和分组后,用 rgl 的底层函数绘图,能完全掌控每个点的颜色、大小等属性,完美解决分组着色的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:35:56