求助:如何用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
相关产品推荐
相关产品推荐

