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

美国ZIP区域统计地图绘制异常,求解决方法

你用usa::zipcodes拿到的是每个ZIP的单点经纬度(区域中心点),但geom_polygon是用来绘制多边形区域的,把零散的点直接喂给它,R会把所有点按顺序强行连接,自然会画出混乱的图形——这就是问题的核心原因。

下面给你对应两种需求的解决方案:

方案1:绘制ZIP区域填充地图(按统计值着色)

美国没有官方的"ZIP区域多边形"数据,常用替代是ZCTA(ZIP Code Tabulation Areas),这是人口普查局划分的近似ZIP的统计区域。用tigris包可以直接获取该数据:

  1. 安装并加载依赖包:
install.packages(c("tigris", "dplyr", "ggplot2", "ggthemes"))
library(tigris)
library(dplyr)
library(ggplot2)
library(ggthemes)
  1. 获取ZCTA多边形数据并与你的数据集关联(注意ZIP码要保持字符串格式,避免前导零丢失):
# 获取简化版美国本土ZCTA数据,减少计算压力
zcta_data <- zctas(cb = TRUE, year = 2020) %>%
  mutate(ZIPCODE = as.character(GEOID20))

# 假设你的数据集叫my_data,包含zipcode和my_stat列
to_map <- zcta_data %>%
  left_join(my_data, by = c("ZIPCODE" = "zipcode"))
  1. 用geom_sf绘制填充地图(sf对象自带多边形边界信息,比geom_polygon更稳定):
ggplot(to_map) +
  geom_sf(aes(fill = my_stat), color = "black", size = 0.09) +
  scale_fill_gradient(low = "yellow", high = "dark green", na.value = "gray90") +
  ggthemes::theme_map() +
  theme(legend.background = element_rect(fill = alpha("white", 0.5))) +
  coord_sf(crs = 4326) # 采用标准WGS84坐标系统

方案2:用圆圈展示密度/统计值(适合中心点数据)

如果只是想展示每个ZIP区域的统计值或密度,直接用geom_point即可,不用纠结多边形:

修改你原来的代码,替换图层并调整参数:

to_map %>%
  ggplot(aes(x = long, y = lat, color = my_stat, size = my_stat)) + 
  geom_point(alpha = 0.6) + # 增加透明度避免点重叠
  scale_color_gradient(low = "yellow", high = "dark green") +
  scale_size_continuous(range = c(1, 5)) # 自定义点的大小范围
  ggthemes::theme_map() + 
  theme(legend.background = element_rect(fill = alpha("white", 0.5))) +
  coord_fixed() # 保持地图比例正确

额外注意:关联数据时,确保你的zipcode列和zipcodes返回的zip列格式一致——比如带前导零的ZIP码要转为字符串,否则数字格式会丢失前导零,导致关联失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:40:20