如何用ggplot2为sf对象绘制代表全球范围的边界框?
实现全球地图外围边界框的方法
你可以通过创建覆盖全球范围的SF多边形并转换到对应投影,再将其添加到地图图层中来实现需求,具体步骤如下:
- 构造全球边界框的SF对象:先创建WGS84坐标系下的全球范围矩形,再转换为罗宾逊投影(与你的国家数据投影一致)。
- 在ggplot中添加边界框图层:设置边界框无填充、仅显示边框,调整图层顺序确保显示效果符合预期。
完整代码如下:
library(ggplot2) library(sf) library(rnaturalearth) # 获取国家数据并转换至罗宾逊投影 countries <- ne_countries(returnclass = "sf") countries <- st_transform(countries, crs = "+proj=robin") # 创建全球范围边界框并转换投影 world_bbox <- st_sfc( st_polygon(list(rbind( c(-180, -90), c(180, -90), c(180, 90), c(-180, 90), c(-180, -90) ))), crs = 4326 # WGS84坐标系 ) world_bbox_robin <- st_transform(world_bbox, crs = "+proj=robin") # 绘制地图:先画边界框(仅边框),再画国家 ggplot() + geom_sf(data = world_bbox_robin, fill = NA, color = "black", size = 1) + geom_sf(data = countries) + theme_minimal()
关键说明
fill = NA确保边界框仅显示边框,不会覆盖地图内容size参数可调整边框粗细,根据需求修改数值- 图层顺序:先添加边界框再添加国家,国家会显示在边界框上方;若想让边框覆盖在最上层,调换两个
geom_sf的顺序即可
内容的提问来源于stack exchange,提问作者asm
相关产品推荐
相关产品推荐

