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

如何在R中使用vegan包为CCA绘图设置row.names作为站点标签

vegan包CCA分析站点标签不显示自定义行名的解决方案

问题原因

  • 数据类型问题:如果cast()返回的是tibble类型(加载tidyverse系列包时会出现),tibble默认不支持自定义行名,会静默忽略行名赋值操作
  • 行名继承失败:部分版本vegan的cca()函数未正确继承输入数据框的行名,导致站点坐标的行名仍为默认索引
  • 绘图参数默认规则:旧版vegan的plot.cca()方法会优先使用序列索引作为站点标签,忽略结果对象中存储的行名

修复方案

先执行以下代码验证当前行名状态,定位问题:

# 查看输入数据的行名是否正确
print(rownames(ls_Treat1))
# 查看CCA结果中存储的站点默认标签
print(rownames(ca$CA$u))

方案1:修正数据类型后重新运行分析

针对tibble不支持行名的问题,先把数据转为普通data.frame再设置行名:

# cast输出后先转普通数据框
ls_Treat1 <- as.data.frame(cast(fungi_ls, Treatment ~ species))
row.names(ls_Treat1) <- ls_Treat1$Treatment
ls_Treat1 <- ls_Treat1[,-1]

# 重新运行CCA后绘图
ca <- cca(ls_Treat1)
plot(ca, display = "sites")

方案2:绘图时手动指定标签

无需重新运行分析,直接在绘图时传入自定义标签:

# 直接传入处理名作为标签
plot(ca, display = "sites", labels = c("AB", "DB", "DL"))

# 也可以直接从原始数据提取,避免手动输入错误
plot(ca, display = "sites", labels = unique(fungi_ls$Treatment))

方案3:手动修改CCA结果对象的行名

直接修改CCA结果中站点坐标的行名,从根源解决继承问题:

# 给CCA结果的站点坐标赋值自定义行名
rownames(ca$CA$u) <- rownames(ls_Treat1)
# 绘图即可正常显示自定义标签
plot(ca, display = "sites")

内容的提问来源于stack exchange,提问作者Lu Moe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:27:02