如何在ggplot地图中为不同basisOfRecord类型设置多种图标?
解决植物位置地图按观测类型设置不同图标的问题
针对你的需求,只需要在现有ggplot代码中添加形状映射并手动指定对应关系即可,以下是具体修改步骤和示例代码:
核心修改逻辑
- 在
geom_sf的美学映射(aes)中加入shape = basisOfRecord,让ggplot根据basisOfRecord的取值区分点的形状 - 使用
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
相关产品推荐
相关产品推荐

