R语言为NMDS排序图添加95%置信区间椭圆的方法咨询
NMDS图添加95%置信区间椭圆实现方案
方案一:基于vegan原生绘图函数修正
你现有代码的问题是ordiellipse()默认绘制的是组内数据的标准差椭圆,并非95%置信区间椭圆,补充对应参数即可直接得到正确结果,无需更换绘图体系,修正后代码如下:
# 绘制样方点 orditorp( dung.families.mds, display = "sites", labels = F, pch = c(16, 8, 17, 18)[as.numeric(group.variables$Heating)], col = c("green", "blue", "orange", "black")[as.numeric(group.variables$Dungfauna)], cex = 1.3 ) # 绘制95%置信区间椭圆 ordiellipse( dung.families.mds, groups = group.variables$Dungfauna, kind = "se", conf = 0.95, draw = "polygon", lty = 1, col = adjustcolor("grey80", alpha.f = 0.4), border = "grey20" ) # 标注stress值 legend("topleft", legend = paste("stress =", round(dung.families.mds$stress,7)), bty = "n", cex = 1)
参数说明:如果需要绘制覆盖95%样本点的数据分布椭圆,而非组均值的95%置信区间,将
kind = "se"替换为kind = "ehull"即可。
方案二:ggplot2 实现代码
ggplot2绘制的核心是先提取NMDS排序坐标,绑定分组信息后再映射图形属性,完整可运行代码如下:
library(ggplot2) library(vegan) # 提取NMDS样方坐标,绑定分组数据 nmds_plot_data <- as.data.frame(scores(dung.families.mds, display = "sites")) nmds_plot_data <- cbind(nmds_plot_data, group.variables) # 绘图 ggplot(nmds_plot_data, aes(x = NMDS1, y = NMDS2)) + # 绘制95%置信椭圆 stat_ellipse( aes(fill = Dungfauna), geom = "polygon", level = 0.95, alpha = 0.3, linetype = 1 ) + # 绘制样方点,形状、颜色映射规则和原代码保持一致 geom_point( aes(shape = Heating, color = Dungfauna), size = 2 ) + scale_color_manual(values = c("green", "blue", "orange", "black")) + scale_shape_manual(values = c(16, 8, 17, 18)) + scale_fill_manual(values = c("green", "blue", "orange", "black")) + # 标注stress值 annotate( "text", x = Inf, y = -Inf, label = paste0("stress = ", round(dung.families.mds$stress,7)), hjust = 1.1, vjust = -0.1, size = 3.5 ) + # 主题调整 theme_bw() + theme(panel.grid = element_blank())
ggplot2绘图常见错误原因
- 未通过
scores()函数从metaMDS结果中提取NMDS1、NMDS2排序坐标,直接使用原始群落数据绘图 - 分组变量与提取的坐标样本顺序不匹配,导致椭圆分组错位
- 误修改
stat_ellipse()的level参数,导致置信水平不符合95%要求
现有基础绘图效果参考:
内容的提问来源于stack exchange,提问作者Katie Jones
相关产品推荐
相关产品推荐

