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

ggplot+geom_sf中调整X轴范围,居中显示含阿拉斯加东部的美国县地图

解决美国县边界地图居中且保留阿拉斯加完整区域的方案

核心思路:偏移阿拉斯加经度+调整绘图范围

针对阿拉斯加因跨180度经线导致部分区域显示在地图右侧的问题,我们可以通过修正阿拉斯加的坐标,把它东半球的部分拉回西半球范围,再配合coord_sf()设置合适的绘图边界,既保留所有区域,又让地图居中显示,同时完美兼容你的点图层。

具体代码实现

library(ggplot2)
library(sf)

# 加载并过滤掉海外领地数据
shp = st_read(dsn = "cb_2021_us_county_500k/cb_2021_us_county_500k.shp")
shps_sf = shp[!(shp$STUSPS %in% c("PR","AS","GU","MP","VI")),]

# 修正阿拉斯加的坐标:将东半球区域(经度>0)的经度减360,拉回西半球
ak_layer = shps_sf[shps_sf$STUSPS == "AK", ]
# 提取坐标矩阵并修改经度
ak_coords = st_coordinates(ak_layer)
ak_coords[ak_coords[, "X"] > 0, "X"] = ak_coords[ak_coords[, "X"] > 0, "X"] - 360
# 重新构建修正后的阿拉斯加sf对象
ak_fixed = st_sf(
  ak_layer[, names(ak_layer) != "geometry"],
  geometry = st_multipolygon(list(matrix(ak_coords, ncol = 2)))
)
# 合并修正后的阿拉斯加与其他区域
shps_sf_fixed = rbind(shps_sf[shps_sf$STUSPS != "AK", ], ak_fixed)

# 绘制居中的完整地图
ggplot() +
  geom_sf(data = shps_sf_fixed) +
  coord_sf(xlim = c(-180, -60), ylim = c(20, 75))  # 可根据需求微调范围

关键说明

  1. 坐标修正逻辑:阿拉斯加跨180度经线的部分原本属于西半球,但因经度计算方式显示为东半球(>0),减去360后就能回到西半球的合理经度范围(<0),避免被挤到地图右侧。
  2. 点图层兼容处理:如果你的点图层也存在阿拉斯加的东半球坐标,只需对这些点执行同样的操作——把经度>0的点的经度值减360,就能和修正后的地图图层完美叠加。
  3. 绘图范围调整:xlim和ylim的参数可根据你想要的显示效果微调,确保美国本土和阿拉斯加都在视野内且布局美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:38:16