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

能否在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():

  1. 筛选物种数据:
# 替换成你实际的物种名称和列名
gent_spA <- subset(gent, species == "物种A")
gent_spB <- subset(gent, species == "物种B")
  1. 绘制地图:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:48:20