PAYATHON 2026

如何在 ggplot 中为 Robinson 投影地图添加边框和坐标标签?

数据阿明

结论

边框位置异常,是因为构造边框时使用了投影前的经纬度范围。当前代码先根据经纬网计算包围盒,再将这个经纬度矩形转换到 Robinson 投影。投影会改变矩形边线的形状和位置,所以转换后的矩形不一定能作为地图外框。可以直接根据投影后的地图数据 world_robinson 计算包围盒,再用它绘制边框。

坐标标签可以由 coord_sf() 生成。theme_void() 会隐藏坐标轴元素;如果需要显示标签,可以改用保留坐标轴元素的主题,例如 theme_minimal()。

修改代码

将原来的 border 构造替换为:

border <- st_as_sfc(st_bbox(world_robinson))

绘图部分可以写成:

ggplot() +
  geom_sf(data = world_robinson) +
  geom_sf(data = border, fill = NA, color = "black", linewidth = 1) +
  coord_sf(
    crs = st_crs(robinson),
    datum = st_crs(4326)
  ) +
  theme_minimal()

st_bbox(world_robinson) 取得的是地图投影后的坐标范围。st_as_sfc() 会将这个范围转换为矩形几何。fill = NA 让边框只显示轮廓,不会遮住地图。coord_sf() 使用 Robinson 坐标系,并以 EPSG

作为经纬网基准,显示相应的坐标标签。

注意事项

  • st_set_crs(4326) 只会设置坐标参考系元数据,不会转换坐标。只有当 world 的坐标本来就是经纬度时,才应这样设置。如果坐标系已经正确标注,可以省略这一步。
  • theme_void() 会隐藏坐标轴文字。若要继续使用它,需要另外设置主题元素来显示坐标标签。
  • 如果外框需要严格对应固定的地图范围,可以按需设置 coord_sf() 的范围。上面的包围盒方案使用 world_robinson 当前几何的范围。

备注:内容仅供参考。