You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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区间内调整即可找到完全不切割陆地、刚好穿过白令海峡的位置。


效果说明

  1. 地图左边界落在白令海峡区域,楚科奇与俄罗斯本土完整连接,没有被边界切割
  2. 地图左右两侧无多余白色垂直边框,所有无陆地的区域均为透明
  3. 可以通过修改plot.margin参数自由调整上下左右的留白宽度,不受expand = F的限制

内容的提问来源于stack exchange,提问作者Cameron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:36:29