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

如何修复R语言绘制美国2D六边形地图时的六边形变形问题

美国六边形地图变形问题的解决方案

核心原因

六边形变形的直接原因是地理投影的尺度畸变:在常用的经纬度投影(如WGS84,EPSG:4326)中,高纬度区域(如阿拉斯加)的东西方向距离会被过度拉伸,导致生成的六边形形态被扭曲。所有基于未校正投影生成的网格都会出现这个问题。

解决步骤

1. 切换到等面积投影

选择适合美国区域的等面积投影,保证所有区域的尺度一致,推荐使用Albers Equal Area Conic(EPSG:5070),该投影专门针对北美区域设计,能有效避免尺度畸变。

2. 修正阿拉斯加、夏威夷的位置(可选)

标准美国地图会将阿拉斯加、夏威夷平移到右下角便于展示,调整时需保持坐标缩放比例一致,避免破坏六边形形态。

3. 修正后代码示例

# 加载所需包
library(sf)
library(ggplot2)
library(tigris)

# 获取美国本土+阿拉斯加+夏威夷数据(替换为你自己的shp/geojson也可)
us_states <- states(cb = TRUE) %>%
  filter(!STUSPS %in% c("PR", "VI", "GU", "AS", "MP"))

# 转换到Albers等面积投影
us_albers <- st_transform(us_states, crs = 5070)

# 调整阿拉斯加:缩放至原大小的30%,并平移到指定位置
alaska <- us_albers %>% filter(STUSPS == "AK")
alaska_adjusted <- st_scale(alaska, scale = c(0.3, 0.3)) %>%
  st_translate(x = -2000000, y = -2500000)

# 调整夏威夷:平移到指定位置
hawaii <- us_albers %>% filter(STUSPS == "HI")
hawaii_adjusted <- st_translate(hawaii, x = 1500000, y = -1500000)

# 合并调整后的所有州数据
us_final <- us_albers %>%
  filter(!STUSPS %in% c("AK", "HI")) %>%
  rbind(alaska_adjusted, hawaii_adjusted)

# 生成统一形态的六边形网格(cell_size单位为米,可按需调整)
hex_grid <- st_make_grid(us_final, cellsize = 100000, square = FALSE) %>%
  st_intersection(us_final)

# 绘制地图
ggplot() +
  geom_sf(data = hex_grid, fill = "#4292c6", color = "white", linewidth = 0.2) +
  theme_minimal() +
  theme(axis.text = element_blank(), axis.title = element_blank())

关键注意事项

  • 必须先转换投影,再生成六边形网格:如果先在经纬度投影下生成网格再转换,畸变已经产生,无法修复。
  • 自定义shp/geojson数据需确保坐标系识别正确,若数据无CRS信息,需先用st_crs(us_data) <- 4326指定原始投影后再转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:45:00