如何使用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
相关产品推荐
相关产品推荐

