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

R语言vegan包ordiplot绘制排序图报X对象未找到错误求解

报错核心原因

vegan包ordiplot()函数的首参数要求传入提前计算完成的排序分析结果对象(如rda()、cca()、metaMDS()等降维函数的输出),不支持直接传入双变量回归公式。你直接将Mean_pH ~ Mean_Water_Table_Depth作为入参传入时,函数内部找不到对应排序结果矩阵,就会触发Error in NROW(X) : object 'X' not found报错。
另外不建议使用attach()挂载数据集,很容易引发变量名冲突,后续排查问题成本极高,直接通过数据框名$列名的格式索引变量更稳妥。

你的数据结构参考如下:
待绘制数据示例

带物种标签、图例的排序图实现代码

以下代码可直接实现你需要的效果:以Mean_Water_Table_Depth为X轴、Mean_pH为Y轴,每个点标注spec.X格式的物种缩写标签,配套物种分类图例。

# 加载vegan包
library(vegan)

# 读取数据,注意制表符分隔的txt文件必须加sep="\t",否则容易出现列识别错误
Ordination <- read.table("pHWTD.txt", header = TRUE, sep = "\t", stringsAsFactors = TRUE)

# 提前校验变量格式,若返回结果不是"numeric",用as.numeric()转换对应列即可
class(Ordination$Mean_pH)
class(Ordination$Mean_Water_Table_Depth)

# 初始化空白排序图框架
ordiplot(
  NULL,
  xlim = range(Ordination$Mean_Water_Table_Depth),
  ylim = range(Ordination$Mean_pH),
  xlab = "Mean Water Table Depth",
  ylab = "Mean pH",
  type = "n"
)

# 按物种分类绘制散点
species_col <- rainbow(length(unique(Ordination$Species)))
points(
  x = Ordination$Mean_Water_Table_Depth,
  y = Ordination$Mean_pH,
  pch = 16,
  col = species_col[as.numeric(Ordination$Species)]
)

# 添加spec.1格式的物种标签,自动调整位置避免重叠
orditorp(
  x = Ordination[, c("Mean_Water_Table_Depth", "Mean_pH")],
  labels = paste0("spec.", 1:nrow(Ordination)),
  cex = 0.8,
  col = species_col[as.numeric(Ordination$Species)]
)

# 添加物种分类图例
legend(
  "topright",
  legend = unique(Ordination$Species),
  pch = 16,
  col = species_col,
  bty = "n"
)
扩展场景(正规群落降维排序)

如果你需要做的是基于群落物种多度数据的降维排序(如PCA、RDA、CA、NMDS),只需先调用对应排序函数计算结果,再将结果对象传入ordiplot()即可,参考代码如下:

# 示例:以pH、地下水位为环境因子做RDA排序
# 提取物种多度矩阵(剔除物种分类列、环境因子列)
comm_matrix <- Ordination[, !colnames(Ordination) %in% c("Species", "Mean_pH", "Mean_Water_Table_Depth")]
# 计算RDA结果
rda_res <- rda(comm_matrix ~ Mean_pH + Mean_Water_Table_Depth, data = Ordination, scale = TRUE)
# 绘制排序图
ordiplot(rda_res, type = "n")
# 添加物种点与标签
points(rda_res, display = "species", pch = 16, col = "steelblue")
orditorp(rda_res, display = "species", labels = paste0("spec.", 1:ncol(comm_matrix)), col = "steelblue", cex = 0.7)
# 添加样方点
points(rda_res, display = "sites", pch = 1)
# 添加环境因子箭头
plot(envfit(rda_res ~ Mean_pH + Mean_Water_Table_Depth, data = Ordination, perm = 999), col = "red")

调参提示

  • 标签重叠时可调整orditorp()的cex参数缩小字号,或换用ordilabel()给标签添加白底色提升可读性。
  • 散点、标签的颜色可自行替换为需要的色值,无需使用默认彩虹配色。

内容的提问来源于stack exchange,提问作者Glacial Phoenix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:54:20