R中的RDA三重图-仅将数值解释变量标绘为箭头;作为质心的因子

lmvvr0a8  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(209)

我在R的纯素库中使用capscale()运行了一个基于距离的RDA,并尝试将结果绘制为自定义三重图。我只想将数字或连续解释变量绘制为箭头/向量。目前,因子和数字解释变量都是用箭头绘制的,我想删除因子(地点和年份)的箭头,并为它们绘制质心。

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

为了绘制前2个轴以及评分(RDA空间中的坐标)解释的提取%

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)

然后设置一个带有比例、轴和标签的空白图

dbRDAplot<-plot(spe.rda.signif,
     scaling = 1, # set scaling type 
     type = "none", # this excludes the plotting of any points from the results
     frame = FALSE,
     # set axis limits
     xlim = c(-1,1), 
     ylim = c(-1,1),
     # label the plot (title, and axes)
     main = "Triplot db-RDA - scaling 1",
     xlab = paste0("db-RDA1 (", perc[1], "%)"), 
     ylab = paste0("db-RDA2 (", perc[2], "%)"))

创建图例并添加研究中心评分点和物种文本

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))], # set shape 
       col = ccols[as.factor(env$siteyr)], # outline colour
       bg = ccols[as.factor(env$siteyr)], # fill colour
       cex = 1.2) # size

text(sc_sp , # text(sc_sp + c(0.02, 0.08) tp adjust text coordinates to avoid overlap with points 
     labels = rownames(sc_sp), 
     col = "black", 
     font = 1, # bold
     cex = 0.7)

这里是我为解释变量添加箭头的地方,但我希望有选择性地仅为数值变量(covery和gmpatch)添加箭头。变量site和year我希望绘制为质心,但不确定如何进行。请注意,这些变量的数据结构已明确指定为因子。

arrows(0,0, # start them from (0,0)
       sc_bp[,1], sc_bp[,2], # end them at the score value
       col = "red", 
       lwd = 2)

text(x = sc_bp[,1] -0.1, # adjust text coordinate to avoid overlap with arrow tip
     y = sc_bp[,2] - 0.03, 
     labels = rownames(sc_bp), 
     col = "red", 
     cex = 1, 
     font = 1)

@JariOksanen谢谢你的回答。我可以使用以下方法来解决这个问题

text(dbRDA, choices = c(1, 2),"cn", arrow=FALSE, length=0.05, col="red", cex=0.8, xpd=TRUE) 

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)
ego6inou

ego6inou1#

@JariOksanen谢谢你的回答。我可以使用以下方法来解决这个问题

text(dbRDA, choices = c(1, 2),"cn", arrow=FALSE, length=0.05, col="red", cex=0.8, xpd=TRUE) 

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)

相关问题