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

如何用geom_sf()去除地球另一侧的多余经纬网格线?

解决Chambord投影下多余网格线的问题

针对你用Chambord投影绘制非洲地图时出现的地球另一侧多余网格线,有两种实用方法可以只隐藏这些多余线条:

方法1:通过coord_sf限制显示范围

直接在ggplot中添加coord_sf(),设置匹配非洲区域的投影坐标范围,就能自动过滤掉外侧的多余网格线。你可以先获取转换后非洲对象的边界,再适当扩大范围避免裁剪地图边缘:

library(tmap)
library(sf)
library(dplyr)
library(ggplot2)

world.sf <- World # from tmap
africa_proj <- world.sf %>% 
  filter(continent == "Africa") %>% 
  st_transform("+proj=chamb +lat_1=22 +lon_1=0 +lat_2=22 +lon_2=45 
               +lat_3=-22 +lon_3=22.5 +datum=WGS84 +type=crs")

# 获取投影后的边界范围
bbox <- st_bbox(africa_proj)

# 绘图时限制显示范围
ggplot(africa_proj) + 
  geom_sf(aes(fill = economy)) +
  coord_sf(xlim = c(bbox[1] - 1e6, bbox[3] + 1e6), 
           ylim = c(bbox[2] - 1e6, bbox[4] + 1e6))

方法2:自定义裁剪后的网格线

先生成全局经纬网格,再裁剪到非洲的边界范围内,替换默认的网格线,能更精准控制网格显示:

# 生成全局经纬网格并转换到目标投影
graticule <- st_graticule() %>%
  st_transform(st_crs(africa_proj))

# 裁剪网格到非洲区域的边界
graticule_cropped <- st_intersection(graticule, st_union(africa_proj))

# 绘图时使用自定义裁剪后的网格
ggplot(africa_proj) + 
  geom_sf(aes(fill = economy)) +
  geom_sf(data = graticule_cropped, color = "gray50", linetype = "dashed") +
  coord_sf(expand = FALSE)

这两种方法都能只保留非洲区域对应的网格线,隐藏地球另一侧的多余线条。第一种操作更简便,第二种对网格的显示范围控制更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:34:53