R语言绘制世界地图如何平移地图、移除侧边白边并保留边距
实现方法
两个需求可以通过调整矢量切割逻辑+主题设置组合实现,不需要设置coord_sf(expand = F),可以自由保留你需要的边距:
- 解决领土切割问题:不要直接用原始4326坐标系的xlim切图,先通过sf的工具把全球矢量的切割经线从默认的180度位置挪到白令海峡,保证俄罗斯楚科奇区域和本土完整相连
- 解决白边透明问题:将绘图面板背景设为完全透明,通过主题参数手动控制边距,避免默认白色面板露出形成垂直边框
完整可运行代码
library(tidyverse) library(sf) library(rnaturalearth) world_map <- ne_countries( type = "countries", scale = "large", returnclass = "sf" ) %>% filter(admin != "Antarctica") %>% # 将地图切割线设置在白令海峡(西经169度),完成地图水平平移 st_wrap_x(wrap = -169, quiet = TRUE) %>% ggplot() + geom_sf( fill = "#264653", size = 0 ) + coord_sf( expand = TRUE, # 保持扩展边距开启,不强制锁死留白 default_crs = st_crs(4326), # 匹配平移后的经度范围,覆盖全球全域 xlim = c(-169, 191), ylim = c(-90, 90), datum = NA # 关闭默认经纬网和坐标刻度线 ) + theme( # 面板和绘图区背景全透明,消除白色竖边 panel.background = element_rect(fill = "transparent", colour = NA), plot.background = element_rect(fill = "transparent", colour = NA), # 手动设置四周留白,数值可按需调整,单位为厘米 plot.margin = margin(1.2, 1.8, 1.2, 1.8, unit = "cm"), # 清除默认多余元素 panel.grid = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank() ) world_map
提示:如果觉得切割线位置不对,可以微调
st_wrap_x()里的wrap参数,在-170到-168区间内调整即可找到完全不切割陆地、刚好穿过白令海峡的位置。
效果说明
- 地图左边界落在白令海峡区域,楚科奇与俄罗斯本土完整连接,没有被边界切割
- 地图左右两侧无多余白色垂直边框,所有无陆地的区域均为透明
- 可以通过修改
plot.margin参数自由调整上下左右的留白宽度,不受expand = F的限制
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

