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

如何使用Shapefile优化美国含阿拉斯加、夏威夷的县级地图布局?

问题描述

我正在开展一个需要绘制美国全部50个州县级地图的项目,目前已部分完成数据映射,但当前使用Shapefile绘制时,阿拉斯加和夏威夷的布局过于分散,尤其是阿拉斯加的末端显示在图表右侧,导致整个地图被拉伸。现有代码如下:

df <- tigris::counties(state = NULL, cb = TRUE, class = 'sf')
# this step is to remove all of the polygons for US territories 
# since my data does not include it
df <- df %>% filter(!STATEFP %in% c('60', '66', '69', '72', '78'))
ggplot(df) + geom_sf()

请问是否有更好的绘制方式或合适的Shapefile来实现更紧凑的地图布局?

解决方案

方法1:使用albersusa包(推荐)

这个包专门针对美国地图做了紧凑布局优化,内置调整好的县级地理数据,直接调用就能得到大陆+缩小版阿拉斯加、夏威夷的紧凑地图:

# 安装并加载所需包
install.packages("albersusa")
library(albersusa)
library(sf)
library(ggplot2)

# 获取已调整布局的县级sf数据
counties_compact <- counties_sf()

# 绘制紧凑地图
ggplot(counties_compact) +
  geom_sf()

如果需要和你的业务数据合并,可通过fips字段(对应tigris包的GEOID字段)进行关联匹配。

方法2:手动调整投影与坐标

若不想额外安装包,可手动修改阿拉斯加和夏威夷的坐标,并切换到适合美国的投影(如Albers等面积投影):

library(tigris)
library(sf)
library(ggplot2)
library(dplyr)

# 获取县级数据并移除海外领地
df <- counties(state = NULL, cb = TRUE, class = 'sf') %>%
  filter(!STATEFP %in% c('60', '66', '69', '72', '78'))

# 定义Albers等面积投影参数
albers_proj <- "+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs"

# 转换数据到目标投影
df_proj <- st_transform(df, crs = albers_proj)

# 处理阿拉斯加:缩小35%并移动到大陆下方
alaska <- df_proj %>% filter(STATEFP == '02')
alaska_scaled <- st_scale(alaska, scale = c(0.35, 0.35))
alaska_moved <- st_sfc(st_geometry(alaska_scaled) + st_point(c(-2000000, -2500000)), crs = albers_proj)

# 处理夏威夷:缩小50%并移动到指定位置
hawaii <- df_proj %>% filter(STATEFP == '15')
hawaii_scaled <- st_scale(hawaii, scale = c(0.5, 0.5))
hawaii_moved <- st_sfc(st_geometry(hawaii_scaled) + st_point(c(-1000000, -2500000)), crs = albers_proj)

# 合并调整后的所有数据
df_compact <- df_proj %>%
  filter(!STATEFP %in% c('02', '15')) %>%
  bind_rows(
    st_sf(alaska %>% select(-geometry), geometry = alaska_moved),
    st_sf(hawaii %>% select(-geometry), geometry = hawaii_moved)
  )

# 绘制紧凑地图
ggplot(df_compact) + geom_sf()

这种方式灵活性更高,可根据需求自行调整缩放比例和偏移位置。

方法3:使用预调整的Shapefile

如果偏好直接使用Shapefile,可选用美国人口普查局发布的National Atlas of the United States系列数据,其中包含已调整布局的美国县级地图(含紧凑版阿拉斯加、夏威夷)。不过相比之下,albersusa包的sf格式数据处理更便捷,无需额外的文件导入操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:23:22