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

如何用ggplot2绘制shapefile时将多边形设为白色并添加标注

解决方案

1. 调整多边形样式(白色填充+黑色边框+隐藏图例)

你的代码问题在于把border放在了aes()映射里,这会将其当作变量处理而非直接设置样式。正确做法是把边框颜色color(ggplot中用color而非border)作为geom_sf的直接参数,同时统一设置填充色并隐藏图例:

statsf2134 %>%
  ggplot() +
  geom_sf(fill = "white", color = "black") +  # 直接指定填充与边框色,无需映射
  guides(fill = "none", color = "none")  # 隐藏所有图例

如果坚持要用scale_fill_manual,可以这么写(但上述方法更直接):

statsf2134 %>%
  ggplot() +
  geom_sf(aes(fill = Statistica), color = "black") +
  scale_fill_manual(values = rep("white", nrow(statsf2134))) +  # 所有类别统一设为白色
  guides(fill = "none")  # 隐藏填充图例

2. 添加多边形内部标注(901-943)

先确保数据框statsf2134中有对应标注的列(比如命名为polygon_id,值为901到943),再用geom_sf_text或geom_sf_label添加标注:

statsf2134 %>%
  ggplot() +
  geom_sf(fill = "white", color = "black") +
  geom_sf_text(aes(label = polygon_id), color = "black") +  # 简洁文本标注
  # 若需要带背景的标注:geom_sf_label(aes(label = polygon_id), fill = "white", color = "black")
  guides(fill = "none", color = "none")

如果数据里没有现成的polygon_id列,可先生成:

statsf2134 <- statsf2134 %>%
  mutate(polygon_id = 901:nrow(.))  # 按行顺序生成901至对应数值的序列

完整代码示例

# 生成标注列(无现成列时执行)
statsf2134 <- statsf2134 %>%
  mutate(polygon_id = 901:nrow(.))

# 绘图
statsf2134 %>%
  ggplot() +
  geom_sf(fill = "white", color = "black") +
  geom_sf_text(aes(label = polygon_id), color = "black", size = 3) +  # size可调整字号
  theme_void()  # 可选:移除坐标轴等冗余元素,让地图更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:30:55