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

如何使用ggplot2绘制vegan包metaMDS结果对应的stressplot(Shepard图)

使用ggplot2绘制vegan metaMDS分析的Shepard图

完全可以实现。vegan内置stressplot()的核心元素可直接从metaMDS结果对象中提取,无需额外依赖包即可复刻甚至自定义绘图效果。


实现步骤与完整代码

1. 前置依赖与示例数据构建

和示例逻辑一致,先加载包并完成NMDS分析:

library(vegan)
library(ggplot2)

set.seed(2)
# 构建群落矩阵
community_matrix = matrix(
  sample(1:100,300,replace=T),nrow=10,
  dimnames=list(paste("community",1:10,sep=""),paste("sp",1:30,sep=""))
)
# 运行NMDS分析
example_NMDS = metaMDS(community_matrix, k=2) 

2. 提取绘图所需数据

Shepard图核心包含三类数据:原始群落相异度、NMDS排序空间距离、保序回归(单调回归)拟合结果:

# 整理观测距离与排序距离的对应数据框
df_shepard <- data.frame(
  obs_dist = as.vector(example_NMDS$diss), # 原始观测相异度
  ord_dist = as.vector(example_NMDS$dist)  # NMDS排序空间距离
)

# 计算保序回归拟合结果(对应原生stressplot的阶梯线)
fit_isoreg <- isoreg(df_shepard$obs_dist, df_shepard$ord_dist)
df_fit <- data.frame(
  obs_dist = fit_isoreg$x,
  fit_dist = fit_isoreg$yf
)

# 提取应力值用于标注
stress_val <- round(example_NMDS$stress, 4)

3. ggplot2绘图

绘图逻辑完全对齐原生stressplot()的样式,也可根据需求自定义配色、字号等:

ggplot() +
  # 绘制观测散点
  geom_point(data = df_shepard, aes(x = obs_dist, y = ord_dist), size = 1.2, alpha = 0.7) +
  # 绘制保序回归阶梯拟合线
  geom_step(data = df_fit, aes(x = obs_dist, y = fit_dist), color = "red", linewidth = 0.8) +
  # 标注应力值
  annotate("text", x = Inf, y = Inf, label = paste0("Stress = ", stress_val), 
           hjust = 1.1, vjust = 1.5, size = 4) +
  # 坐标轴与主题设置
  labs(x = "Observed Dissimilarity", y = "Ordination Distance") +
  theme_bw(base_size = 12) +
  theme(panel.grid = element_blank())

效果说明

上述代码输出的图和原生stressplot(example_NMDS)结果完全一致:散点对应两两样本的距离匹配关系,红色阶梯线为单调拟合结果,右上角标注了模型的应力值。如果需要调整样式(比如修改散点颜色、添加拟合方程标注、调整坐标轴范围),直接修改ggplot的对应参数即可。


内容的提问来源于stack exchange,提问作者Freddie J. Heather

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:45:05