使用ggplot和geom_sf实现跨国际日期变更线地图重居中
问题说明
使用rnaturalearth包绘制欧洲地图时,俄罗斯跨国际日期变更线的远东领土会被显示在地图最左侧,导致图面存在大量无效空白,需要对地图做重新居中优化,确认是否需要手动将左侧的空间多边形移动到右侧。
复现代码
library(rnaturalearth) library(tidyverse) ne_countries(returnclass = "sf", continent = "europe") %>% ggplot() + geom_sf()
初始绘制效果

本复现实例于2022-07-02由reprex包(v2.0.1)创建生成
解决方法
不需要手动拆分、移动空间多边形,直接用sf包内置的经度平移函数即可自动处理跨国际日期变更线的要素,再配合范围裁剪就能消除无效空白,具体操作如下:
- 加载sf包用于空间数据处理
- 调用
st_shift_longitude()自动将跨180°经线的俄罗斯远东部分从地图左侧平移到右侧 - 对绘图范围做裁剪,去掉边缘多余空白,也可根据需要切换适配欧洲的投影坐标系优化显示
优化后的可运行代码:
library(rnaturalearth) library(tidyverse) library(sf) ne_countries(returnclass = "sf", continent = "europe") %>% # 自动平移跨日期变更线的几何要素 st_shift_longitude() %>% ggplot() + geom_sf() + # 限定欧洲显示范围,消除无效空白,可按需调整经纬度边界 coord_sf(xlim = c(-30, 70), ylim = c(34, 73), expand = FALSE)
- 如果需要更专业的欧洲地图显示效果,可以在
coord_sf()中指定欧洲专用投影,比如设置crs = st_crs(3035)调用ETRS89/LAEA Europe等面积投影,显示效果会更符合常规欧洲地图的视觉习惯。
内容的提问来源于stack exchange,提问作者Kene David Nwosu
相关产品推荐
相关产品推荐

