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

如何用R语言基于美国邮编数据创建热力图及响应数地图?

R语言实现美国邮编地理可视化方案

任务1:按邮编统计响应数量的地图(基于choroplethrZip)

choroplethrZip是专门用于美国邮编级地图可视化的工具,步骤如下:

1. 安装并加载依赖包

install.packages(c("choroplethrZip", "dplyr"))
library(choroplethrZip)
library(dplyr)

2. 预处理数据

确保数据集(假设名为df)中Zip_code为字符型(避免丢失前导零),统计每个邮编的响应数量并调整列名匹配工具要求:

# 统计各邮编响应数
zip_stats <- df %>%
  group_by(Zip_code) %>%
  summarize(response_count = n()) %>%
  rename(region = Zip_code, value = response_count) # 必须用region和value作为列名

3. 绘制邮编地图

# 生成全国范围的邮编统计地图
zip_choropleth(
  zip_stats,
  title = "美国各邮编响应数量分布",
  legend = "响应数量",
  num_colors = 7, # 自定义颜色分档数
  zip_zoom = NULL # NULL表示显示全部美国邮编区域
)

若需聚焦特定区域,可将zip_zoom设为目标邮编向量(如c("90210", "10001"))。


任务2:Magnitude插值热力图

要生成平滑热力效果的插值图,可通过克里金插值结合ggplot2或leaflet实现,步骤如下:

1. 安装并加载依赖包

install.packages(c("zipcode", "gstat", "ggplot2", "maps", "sf"))
library(zipcode)
library(gstat)
library(ggplot2)
library(maps)
library(sf)

2. 匹配邮编与经纬度

将邮编转换为地理坐标:

# 加载内置邮编经纬度数据
data(zipcode)

# 合并用户数据与地理信息,过滤无效坐标
df_geo <- df %>%
  mutate(Zip_code = as.character(Zip_code)) %>%
  left_join(zipcode, by = c("Zip_code" = "zip")) %>%
  filter(!is.na(latitude), !is.na(longitude))

3. 执行克里金插值

创建覆盖美国本土的网格,对Magnitude进行空间插值:

# 获取美国州界底图数据
usa_states <- map_data("state")

# 生成插值网格(分辨率可通过length.out调整)
interp_grid <- expand.grid(
  lon = seq(min(usa_states$long), max(usa_states$long), length.out = 200),
  lat = seq(min(usa_states$lat), max(usa_states$lat), length.out = 200)
)

# 普通克里金插值
krige_result <- krige(
  Magnitude ~ 1,
  locations = ~lon + lat,
  data = df_geo %>% rename(lon = longitude, lat = latitude),
  newdata = interp_grid
)

4. 绘制静态热力图

ggplot() +
  # 绘制州界底图
  geom_polygon(
    data = usa_states,
    aes(x = long, y = lat, group = group),
    fill = "white", color = "gray60", linewidth = 0.3
  ) +
  # 绘制插值热力层
  geom_tile(
    data = krige_result,
    aes(x = lon, y = lat, fill = var1.pred),
    alpha = 0.7
  ) +
  # 设置颜色渐变
  scale_fill_viridis_c(option = "plasma", name = "Magnitude插值值") +
  # 适配美国地图比例
  coord_fixed(ratio = 1.3) +
  labs(title = "美国Magnitude空间插值热力图", x = "经度", y = "纬度") +
  theme_minimal()

可选:交互式热力图(基于leaflet)

若需可交互的地图,用leaflet实现:

library(leaflet)

# 将插值结果转为空间对象
grid_sf <- st_as_sf(interp_grid, coords = c("lon", "lat"), crs = 4326)
krige_sf <- st_sf(krige_result, geometry = grid_sf$geometry)

# 生成交互式地图
leaflet() %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(
    data = st_as_sf(usa_states, coords = c("long", "lat"), group = group),
    fillOpacity = 0, color = "gray", weight = 1
  ) %>%
  addRasterImage(
    krige_sf$var1.pred,
    colors = viridis::plasma(100),
    opacity = 0.7
  ) %>%
  addLegend(
    pal = colorNumeric("plasma", domain = krige_sf$var1.pred),
    values = krige_sf$var1.pred,
    title = "Magnitude"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:05:12