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

R语言db-RDA三元图定制:数值变量绘箭头,因子绘质心

解决vegan包db-RDA绘图中解释变量类型区分显示问题

使用vegan包的capscale()函数运行基于距离的RDA(db-RDA)后,需绘制定制三元图:仅将连续型解释变量(canopy、gmpatch)显示为箭头,分类变量(site、year)显示为质心,但原绘图逻辑会将所有解释变量都绘制成箭头,以下是修正方案:


原分析流程代码

1. 运行db-RDA

dbRDA=capscale(species ~ canopy+gmpatch+site+year+Condition(pair), data=env, dist="bray")

2. 提取轴解释率和各类得分

perc <- round(100*(summary(spe.rda.signif)$cont$importance[2, 1:2]), 2)
sc_si <- scores(spe.rda.signif, display="sites", choices=c(1,2), scaling=1)
sc_sp <- scores(spe.rda.signif, display="species", choices=c(1,2), scaling=1)
sc_bp <- scores(spe.rda.signif, display="bp", choices=c(1, 2), scaling=1)

3. 初始化空白绘图

dbRDAplot<-plot(spe.rda.signif,
     scaling = 1, # 设置缩放类型
     type = "none", # 不绘制任何结果点
     frame = FALSE,
     # 设置轴范围
     xlim = c(-1,1), 
     ylim = c(-1,1),
     # 设置绘图标签
     main = "Triplot db-RDA - scaling 1",
     xlab = paste0("db-RDA1 (", perc[1], "%)"), 
     ylab = paste0("db-RDA2 (", perc[2], "%)"))

4. 添加图例、站点点和物种文本

pchh <- c(2, 17, 1, 19)
ccols <- c("black", "red", "black", "red")
legend("topleft", c("2016 MC", "2016 SP", "2018 MC", "2018 SP"), pch = pchh[unique(as.numeric(as.factor(env$siteyr)))], pt.bg = ccols[unique(as.factor(env$siteyr))], bty = "n")

points(sc_si, 
       pch = pchh[as.numeric(as.factor(env$siteyr))], # 设置形状
       col = ccols[as.factor(env$siteyr)], # 轮廓颜色
       bg = ccols[as.factor(env$siteyr)], # 填充颜色
       cex = 1.2) # 大小

text(sc_sp , # 可调整坐标避免重叠
     labels = rownames(sc_sp), 
     col = "black", 
     font = 1, 
     cex = 0.7)

5. 原解释变量绘图代码(存在问题)

这段代码会把所有解释变量都绘制成箭头,不符合需求:

arrows(0,0, # 起点(0,0)
       sc_bp[,1], sc_bp[,2], # 终点为得分值
       col = "red", 
       lwd = 2)

text(x = sc_bp[,1] -0.1, # 调整文本位置避免与箭头重叠
     y = sc_bp[,2] - 0.03, 
     labels = rownames(sc_bp), 
     col = "red", 
     cex = 1, 
     font = 1)

修正后的解释变量绘图代码

通过text()函数分别处理两类变量:指定display参数区分分类变量质心("cn")和连续变量箭头("bp"),并通过select筛选目标连续变量:

# 绘制分类变量(site、year)的质心(无箭头)
text(dbRDA, choices = c(1, 2),"cn", arrow=FALSE, length=0.05, col="red", cex=0.8, xpd=TRUE) 

# 绘制连续变量(canopy、gmpatch)的箭头
text(dbRDA, display = "bp", labels = c("canopy", "gmpatch"), choices = c(1, 2),scaling = "species", arrow=TRUE, select = c("canopy", "gmpatch"), col="red", cex=0.8, xpd = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:25:24