如何在ggplot中添加dbRDA分析的环境因子箭头?
在ggplot中展示dbRDA的环境因子箭头
核心思路
dbRDA(基于距离的冗余分析)中纳入模型的环境因子信息,直接存储在模型结果的biplot得分里,无需额外用envfit拟合,只需提取这些得分即可在ggplot中绘制箭头。
步骤1:提取环境因子箭头坐标
假设你用vegan包的capscale(或dbrda)完成了dbRDA分析,模型对象为my_dbrda:
# 加载vegan包 library(vegan) # 示例dbRDA模型(替换成你的实际代码) my_dbrda <- capscale(community_matrix ~ env_var1 + env_var2 + env_var3, data = env_data, distance = "bray") # 提取环境因子的biplot得分(箭头端点坐标) env_arrows <- as.data.frame(scores(my_dbrda, display = "bp")) # 添加环境因子名称列 env_arrows$variable <- rownames(env_arrows)
display = "bp"指定提取biplot points,即环境因子箭头的端点坐标。
步骤2:提取样本点坐标(可选,用于绘制样本分布)
# 提取样本的排序得分 sample_scores <- as.data.frame(scores(my_dbrda, display = "sites")) # 如果有分组变量,可添加到数据框(按需) sample_scores$group <- your_group_data
步骤3:用ggplot绘制完整dbRDA图
library(ggplot2) ggplot() + # 绘制样本点(按需调整颜色、形状等) geom_point(data = sample_scores, aes(x = MDS1, y = MDS2, color = group), size = 2) + # 绘制环境因子箭头:起点为原点(0,0),终点为提取的坐标 geom_segment(data = env_arrows, aes(x = 0, xend = MDS1, y = 0, yend = MDS2), arrow = arrow(length = unit(0.2, "cm")), color = "darkred", linewidth = 1) + # 添加环境因子标签(偏移1.1倍避免与箭头重叠) geom_text(data = env_arrows, aes(x = MDS1 * 1.1, y = MDS2 * 1.1, label = variable), color = "darkred", fontface = "bold", size = 4) + # 设置坐标轴标签,显示解释率 xlab(paste0("dbRDA1 (", round(my_dbrda$CCA$eig[1]/sum(my_dbrda$CCA$eig)*100, 1), "%)")) + ylab(paste0("dbRDA2 (", round(my_dbrda$CCA$eig[2]/sum(my_dbrda$CCA$eig)*100, 1), "%)")) + theme_bw() + theme(panel.grid = element_blank())
- 注意:如果你的dbRDA轴名称是
DB1/DB2而非MDS1/MDS2,直接替换即可,可通过colnames(sample_scores)查看轴名。
关键说明
- 区别于
envfit:envfit是将环境因子拟合到已有的排序结果(如NMDS),而dbRDA的环境因子是作为解释变量直接纳入模型的,因此直接从模型的scores中提取"bp"即可,无需额外拟合。 - 如果是用
dbrda函数构建的模型,提取方式完全一致,scores(dbrda_result, display = "bp")同样有效。
内容的提问来源于stack exchange,提问作者no_frills_30
相关产品推荐
相关产品推荐

