能否在ggplot中使用多个coord_map函数绘制并区分两种植物物种?
区分地图上两种植物物种的ggplot绘制方案
问题背景
我有一个包含植物物种坐标分布的CSV文件,已使用ggplot及以下代码绘制了地图:
ilwi <- ggplot() + geom_polygon( data = w, aes(x = long, y = lat, group = group), fill = "lightyellow", colour = "black" ) + coord_map() + geom_point( data = gent, aes(x = long2, y = lat2), colour = "royalblue3", size = 2, position = "identity" )目前对地图外观较为满意,但图中所有点实际对应两种植物物种,我希望在地图上区分它们。gent数据集中包含这两种物种的坐标,请问是否需要先将两个物种的数据分离,之后能否通过添加另一个coord_map()函数来绘制另一个物种?我尚未尝试从单个CSV中分离两种物种的数据。
核心结论
- 不需要提前分离两个物种的数据,直接利用ggplot的映射功能就能完成区分
- 绝对不要重复添加
coord_map():这个函数是设置整张图的坐标投影,多次添加只会覆盖之前的设置,完全没有必要
最优实现方法(推荐)
假设你的gent数据集中有一个标记物种的列(比如列名为species,CSV里应该包含这个字段),只需将颜色映射绑定到该物种列,ggplot会自动为不同物种分配颜色并生成图例:
ilwi <- ggplot() + # 绘制底图多边形 geom_polygon( data = w, aes(x = long, y = lat, group = group), fill = "lightyellow", colour = "black" ) + # 仅需一次坐标投影设置 coord_map() + # 绑定颜色到物种列,自动区分不同物种 geom_point( data = gent, aes(x = long2, y = lat2, colour = species), size = 2, position = "identity" ) + # 可选:手动指定两种物种的颜色(替换成你需要的颜色值) scale_colour_manual(values = c("物种A" = "royalblue3", "物种B" = "darkred"))
备选方法(手动分离数据)
如果你坚持要分开两个物种的数据再绘制(不推荐,步骤更繁琐),可以先筛选数据,再分别添加geom_point,但依然只需要一次coord_map():
- 筛选物种数据:
# 替换成你实际的物种名称和列名 gent_spA <- subset(gent, species == "物种A") gent_spB <- subset(gent, species == "物种B")
- 绘制地图:
ilwi <- ggplot() + geom_polygon( data = w, aes(x = long, y = lat, group = group), fill = "lightyellow", colour = "black" ) + coord_map() + # 绘制第一个物种的点 geom_point( data = gent_spA, aes(x = long2, y = lat2), colour = "royalblue3", size = 2, position = "identity" ) + # 绘制第二个物种的点 geom_point( data = gent_spB, aes(x = long2, y = lat2), colour = "darkred", size = 2, position = "identity" )
内容的提问来源于stack exchange,提问作者Melissa Duda
相关产品推荐
相关产品推荐

