如何在R语言中利用NMDS对不同采样点进行颜色编码?
按Site对NMDS采样点着色的实现方法
核心思路
你需要保留原始数据中的Site分组信息,将其作为颜色映射的依据——不管每个Site对应的采样事件数量多少,同一Site的所有采样点都会使用相同颜色。
基于vegan原生绘图的修改方案
- 提取数据并完成NMDS计算:
library(vegan) # 提取物种丰度数据(与你原代码一致) test2 <- data.frame(relative_abundance_fish_data[1:100,5:51]) test2.hel <- decostand(test2, method = "hellinger") # 提取Site分组信息,用于后续着色 site_groups <- relative_abundance_fish_data[1:100, "Site"] # 设置固定随机种子,确保结果可重复 set.seed(123) nmds1 <- metaMDS(test2.hel, autotransform = F)
- 按Site着色并绘制NMDS图:
# 为每个Site分配唯一颜色 unique_sites <- unique(site_groups) color_palette <- rainbow(length(unique_sites)) site_color_vec <- color_palette[match(site_groups, unique_sites)] # 绘制NMDS点图,按Site着色 ordiplot(nmds1, type = "points", col = site_color_vec, pch = 16, cex = 1.2) # 添加图例区分不同Site legend("topright", legend = unique_sites, fill = color_palette, title = "Site", cex = 0.8)
基于ggplot2+ggvegan的美观方案(可选)
如果想要更灵活的样式调整,推荐使用ggvegan结合ggplot2:
# 安装并加载所需包 install.packages("ggvegan") library(ggvegan) library(ggplot2) # 将NMDS结果转换为数据框,并关联Site信息 nmds_scores <- as.data.frame(scores(nmds1, display = "sites")) nmds_scores$Site <- site_groups # 绘制带颜色分组的NMDS图 ggplot(nmds_scores, aes(x = NMDS1, y = NMDS2, color = Site)) + geom_point(size = 3, alpha = 0.8) # alpha参数避免点重叠遮挡 theme_bw() + labs(title = "NMDS of Fish Community Composition (San Antonio River Basin)", x = "NMDS Axis 1", y = "NMDS Axis 2") + scale_color_brewer(palette = "Set3") # 使用柔和的配色方案
关键说明
- 代码中
site_groups直接关联了每个采样点对应的Site,同一Site下的所有采样事件(无论数量多少)都会被赋予相同颜色。 - 若你的
Site列在数据中的位置或列名不同,只需调整relative_abundance_fish_data[1:100, "Site"]中的索引或列名即可。
内容的提问来源于stack exchange,提问作者olivia r
相关产品推荐
相关产品推荐

