geom_sf()的size参数无响应,叙利亚地图边框无法调整
ggplot2绘制叙利亚地图时geom_sf的size参数无效的解决思路
问题背景
使用ggplot2绘制叙利亚地图时,尝试通过size参数增大国家边框线粗细,但该参数未产生预期效果。复现代码及对应效果如下:
默认绘制代码
library(raster) #> Loading required package: sp library(tidyverse) library(sf) #> Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE admin0.shp <- getData('GADM', country='SYR', level=0) #> Warning in getData("GADM", country = "SYR", level = 0): getData will be removed in a future version of raster #> . Please use the geodata package instead admin0.shp <- st_as_sf(admin0.shp) ggplot(admin0.shp)+ geom_sf()
默认效果:
设置size=2后的代码
ggplot(admin0.shp)+ geom_sf(size=2)
设置后的效果:
解决思路
- 更换数据获取工具:原代码中
raster包的getData已被标记为即将移除,建议使用官方推荐的geodata包获取GADM数据,新数据的几何结构更规范,大概率能解决参数失效问题。示例代码:
library(geodata) library(sf) library(tidyverse) # 获取叙利亚admin0级空间数据 admin0.shp <- gadm(country = "SYR", level = 0, path = tempdir()) admin0.shp <- st_as_sf(admin0.shp) # 显式指定边框颜色和粗细 ggplot(admin0.shp) + geom_sf(color = "black", size = 2, fill = "lightgrey")
显式指定边框颜色:若默认边框颜色与填充色过于接近,会导致
size变化难以察觉。明确设置color为高对比色,配合size参数即可直观看到边框粗细变化。合并多重多边形:如果获取的空间数据是
MULTIPOLYGON类型,内部可能存在大量细碎边界,干扰主边框的显示效果。可尝试合并为单一多边形:
# 将多重多边形合并为单一对象 admin0_single <- admin0.shp %>% st_union() %>% st_sf() ggplot(admin0_single) + geom_sf(size = 2, color = "black", fill = "lightgrey")
- 更新相关包版本:旧版本的
ggplot2或sf可能存在参数兼容问题,更新到最新稳定版本后重新测试size参数是否生效。
内容的提问来源于stack exchange,提问作者Nick Glättli
相关产品推荐
相关产品推荐

