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

如何在ggplot地图中为不同basisOfRecord类型设置多种图标?

解决植物位置地图按观测类型设置不同图标的问题

针对你的需求,只需要在现有ggplot代码中添加形状映射并手动指定对应关系即可,以下是具体修改步骤和示例代码:

核心修改逻辑

  1. 在geom_sf的美学映射(aes)中加入shape = basisOfRecord,让ggplot根据basisOfRecord的取值区分点的形状
  2. 使用scale_shape_manual手动指定两种观测类型对应的图标:圆形对应human observation,三角形对应preserved specimen

修改后的完整代码示例

假设你现有代码框架如下,直接替换核心绘图部分即可:

library(ggplot2)
library(sf)

# 读取你的sf格式数据(替换成你的数据路径)
plant_data <- st_read("你的植物数据文件.shp")

# 修改后的绘图代码
ggplot() +
  # 加入shape映射到basisOfRecord,保留原有的color年代映射
  geom_sf(data = plant_data, aes(color = 你的年代列名, shape = basisOfRecord), size = 3) +
  # 手动指定形状对应关系:16=实心圆形,17=实心三角形(可根据需求换其他编号)
  scale_shape_manual(
    values = c(
      "human observation" = 16,
      "preserved specimen" = 17
    ),
    name = "观测类型" # 设置图例标题
  ) +
  # 保留你原来的颜色映射(这里以连续色阶为例,若年代是分类则换对应离散色阶)
  scale_color_viridis_c(name = "年代") +
  # 你的其他主题、底图设置(比如theme_bw())
  theme_bw()

新手注意事项

  • 确保basisOfRecord列的取值和代码中的字符串完全一致(包括大小写、空格,比如不要写成Human Observation)
  • 如果数据里有basisOfRecord的其他取值,要么提前用dplyr::filter()过滤掉,要么在scale_shape_manual的values里补充对应的形状编号
  • size参数可以调整点的大小,根据你的地图比例自行修改
  • 若你的年代是分类变量(比如分几个年代区间),把scale_color_viridis_c换成scale_color_manual或其他离散色阶函数即可

内容的提问来源于stack exchange,提问作者Argentavis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:05:25