如何用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
相关产品推荐
相关产品推荐

