使用geobr与ggplot2绘制州界:去除点仅保留边界的方法
问题解决:基于市镇数据绘制州级外围边界
我手头有巴西市镇和州级的地图数据(用geobr库处理),想要基于市镇的geometry绘制各州的外围粗线条边界,但按州分组汇总geometry后,地图上出现了大量多余的点,只需要州的外围轮廓,现有代码如下:
[图片:显示含大量点与边界的地图]
代码:
ggplot(df_mun) + geom_sf(aes(fill = Mortalidade), size=0.5, color = "gray50") + geom_sf(color = 'black', fill = NA, linewidth = 0.75, data = . %>% group_by(name_state) %>% summarise())
解决方法
问题出在默认的summarise()只是简单合并几何对象,没有做拓扑融合,导致保留了市镇间的内部边界,甚至产生碎点。需要用sf包的st_union()来合并同州的市镇几何,生成完整的州级轮廓。
修改后的代码:
library(sf) library(dplyr) library(ggplot2) ggplot(df_mun) + geom_sf(aes(fill = Mortalidade), size=0.5, color = "gray50") + geom_sf(color = 'black', fill = NA, linewidth = 0.75, data = . %>% group_by(name_state) %>% summarise(geometry = st_union(geometry)))
额外提示
如果修改后仍有异常点,大概率是原始市镇数据存在几何错误,可以先修复:
df_mun <- df_mun %>% mutate(geometry = st_make_valid(geometry))
内容的提问来源于stack exchange,提问作者ElMago
相关产品推荐
相关产品推荐

