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

如何在R语言中为db-RDA三元图的样点设置不同颜色?

解决db-RDA样点按site字段设置不同颜色的问题

核心修改思路

将样点填充色bg参数从固定值,替换为与env$site(即site_names)分类对应的颜色向量即可,具体步骤如下:

1. 定义与site对应的颜色映射

先确认site_names的类别,创建匹配的颜色向量:

# 查看site的类别(确保是分类变量)
unique(site_names)
# 定义颜色,按site类别顺序对应,可自行替换成你需要的颜色
site_colors <- c("steelblue", "darkorange")

2. 修改points函数的bg参数

把原本固定的bg = "steelblue"替换为根据site_names匹配的颜色:

# 将site_names转为因子,确保颜色与类别对应正确
site_factor <- as.factor(site_names)

# 绘制分色样点
points(sc_si,
       pch = 21, 
       col = "black", 
       bg = site_colors[site_factor],  # 按site类别映射颜色
       cex = 1.2)

3. 添加图例(可选但推荐)

为了让图形更清晰,添加图例说明颜色对应的site:

legend("topright",  # 图例位置可自行调整,比如"bottomleft"
       legend = levels(site_factor),
       pch = 21,
       pt.bg = site_colors,
       col = "black",
       bty = "n",  # 去掉图例边框
       title = "Site")

完整修改后的代码片段(整合到原有代码中)

#running the db-RDA 
spe.rda.signif=capscale(species~canopy+gmpatch+site+year+Condition(pair), data=env, dist="bray")

#extract % explained by first 2 axes
perc <- round(100*(summary(spe.rda.signif)$cont$importance[2, 1:2]), 2)

#extract scores (coordinates in RDA space)
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)

#These are my location or site names that I want to use to define the colours of my points
site_names <- env$site

# 定义site对应的颜色
site_colors <- c("steelblue", "darkorange")
site_factor <- as.factor(site_names)

#set up blank plot with scaling, axes, and labels
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], "%)")
)

#add points for site scores - 按site分颜色
points(sc_si,
       pch = 21, 
       col = "black", 
       bg = site_colors[site_factor],
       cex = 1.2)

# 添加图例
legend("topright",
       legend = levels(site_factor),
       pch = 21,
       pt.bg = site_colors,
       col = "black",
       bty = "n",
       title = "Site")

# 继续添加物种名称和环境因子箭头(你的原有代码)
# text(sc_sp, labels = rownames(sc_sp), cex = 0.8)
# arrows(0, 0, sc_bp[,1], sc_bp[,2], length = 0.1, col = "red")

注意事项

  • 如果site_names有超过2个类别,只需在site_colors中添加对应数量的颜色即可,顺序要和levels(site_factor)一致。
  • 若不确定site_factor的levels顺序,可先运行levels(site_factor)查看,再调整site_colors的顺序。

内容的提问来源于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 02:35:21