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

如何将NMDS分析结果按处理汇总为带误差棒的单一点?

NMDS分组汇总带误差棒绘图实现方案

要把NMDS图里的多样本散点改成每个处理组对应一个带误差棒的点,核心步骤是提取样本NMDS坐标→按组统计均值与误差→用ggplot2可视化,以下是具体R代码实现:

1. 加载依赖包

library(vegan)
library(ggplot2)
library(dplyr)

2. 提取NMDS坐标并关联分组信息

假设你已经用vegan完成了NMDS分析(对象为nmds_result),且分组信息存储在元数据meta_data的Treatment列:

# 提取所有样本的NMDS1、NMDS2坐标
nmds_sites <- as.data.frame(scores(nmds_result, display = "sites"))
# 关联分组信息
nmds_sites$Treatment <- meta_data$Treatment

3. 按处理组计算统计量

这里以标准误作为误差棒的范围(也可以换成标准差sd(),根据你的需求调整):

group_stats <- nmds_sites %>%
  group_by(Treatment) %>%
  summarise(
    nmds1_mean = mean(NMDS1),
    nmds1_se = sd(NMDS1)/sqrt(n()),  # 标准误:标准差/样本量平方根
    nmds2_mean = mean(NMDS2),
    nmds2_se = sd(NMDS2)/sqrt(n())
  )

4. 绘制带误差棒的NMDS图

ggplot(group_stats, aes(x = nmds1_mean, y = nmds2_mean, color = Treatment)) +
  # 绘制x轴方向误差棒
  geom_errorbar(aes(xmin = nmds1_mean - nmds1_se, xmax = nmds1_mean + nmds1_se), 
                width = 0.02, linewidth = 0.8) +
  # 绘制y轴方向误差棒
  geom_errorbarh(aes(ymin = nmds2_mean - nmds2_se, ymax = nmds2_mean + nmds2_se), 
                 height = 0.02, linewidth = 0.8) +
  # 绘制组中心圆点
  geom_point(size = 4, shape = 19) +
  # 可选:添加NMDS应力值标注
  annotate("text", x = max(nmds_sites$NMDS1)*0.8, y = min(nmds_sites$NMDS2)*0.8,
           label = paste0("Stress = ", round(nmds_result$stress, 3))) +
  theme_bw() +
  labs(x = "NMDS1", y = "NMDS2")

额外技巧

  • 如果需要保留原始样本散点作为背景参考,可在ggplot中添加:geom_point(data = nmds_sites, alpha = 0.3, size = 1.5)
  • 若要添加环境因子箭头,可先用envfit(nmds_result, env_data)拟合,再提取箭头坐标用geom_segment()绘制

内容的提问来源于stack exchange,提问作者André Faust

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:44:54