如何在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
相关产品推荐
相关产品推荐

