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

