如何为R中矩阵生成的种群隔离距离散点图按区域着色?
R实现种群隔离距离图的区域配对着色方案
核心思路
先建立种群与所属区域的映射关系,统一无序种群对的区域组合表示,再为不同组合分配对应颜色,最后将颜色向量传入绘图函数的col参数。
分步代码实现
- 定义种群-区域映射向量
确保向量名称与Dgeo/Dgen的行/列种群名完全一致:
# 示例:6个种群分属A、B、C三个区域 pop_region <- c("A", "A", "B", "B", "C", "C") names(pop_region) <- c("pop1", "pop2", "pop3", "pop4", "pop5", "pop6")
- 生成种群对的区域组合矩阵
用outer函数生成所有种群对的区域组合,通过pmin/pmax统一无序对的表示(比如A-B和B-A都转为"A-B"):
region_pairs <- outer(pop_region, pop_region, function(x, y) paste(pmin(x, y), pmax(x, y), sep = "-"))
- 提取下三角区域的组合类型
匹配距离矩阵lower.tri对应的种群对:
pair_types <- region_pairs[lower.tri(region_pairs)]
- 定义颜色映射规则
为每种区域组合指定颜色,可按需调整:
color_map <- c( "A-A" = "darkgreen", # 同区域A "B-B" = "darkblue", # 同区域B "C-C" = "darkred", # 同区域C "A-B" = "olivedrab", # A-B跨区域 "A-C" = "orange", # A-C跨区域 "B-C" = "purple" # B-C跨区域 )
- 生成点颜色向量并绘图
将组合类型转换为对应颜色,代入绘图函数:
point_colors <- color_map[pair_types] plot(Dgeo[lower.tri(Dgeo)], Dgen[lower.tri(Dgen)], xlab = "地理距离", ylab = "遗传距离", pch = 20, cex = .5, col = point_colors, ylim = c(0, 1))
- 添加图例(可选)
方便识别不同颜色对应的组合:
legend("topleft", legend = names(color_map), col = color_map, pch = 20, cex = 0.8, title = "种群对区域组合")
注意事项
- 种群名称必须在
pop_region、Dgeo、Dgen中完全一致,否则会出现颜色匹配错误 - 若区域数量或组合类型变化,只需调整
pop_region和color_map即可适配
内容的提问来源于stack exchange,提问作者Léa Amice-Mattei
相关产品推荐
相关产品推荐

