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

如何用R结合州缩写绘制美国各州犯罪数值地图?遇fiftystater难题

嘿,我来帮你搞定这个美国州犯罪数据的地图可视化问题!用fiftystater包其实没那么复杂,我给你一步步拆解,保证完美适配你的数据集👇

第一步:先把必要的工具准备好

首先得确保你装了需要的R包,fiftystater是核心,搭配ggplot2绘图、dplyr处理数据就够了:

# 没装过的话先安装
install.packages(c("fiftystater", "ggplot2", "dplyr"))

# 加载包
library(fiftystater)
library(ggplot2)
library(dplyr)
第二步:把你的数据集和地图数据对齐

fiftystater自带的地图数据fifty_states里,州缩写的列名叫abbrev,所以你要确保你的数据集里的州缩写列能和它匹配上:

  • 如果你的州缩写列名不是abbrev(比如叫state_code),先重命名:
    # 假设你的数据集叫crime_data
    crime_data <- crime_data %>% rename(abbrev = state_code)
    
  • 统一把州缩写转成大写(fifty_states里的缩写都是大写,避免匹配失败):
    crime_data$abbrev <- toupper(crime_data$abbrev)
    
  • 最后把你的数据和地图数据合并:
    merged_data <- left_join(fifty_states, crime_data, by = "abbrev")
    
第三步:绘制你想要的地图

接下来就可以用ggplot2画出颜色对应犯罪数量的美国地图了,代码里的注释帮你理解每一步:

ggplot(merged_data, aes(x = long, y = lat, group = group, fill = value_x)) +
  # 绘制州的填充和白色边界
  geom_polygon(color = "white", linewidth = 0.3) +
  # 用fiftystater专属的坐标系统,保证地图比例正确不会变形
  coord_map("polyconic") +
  # 可选:加上州缩写标注,方便看对应关系
  geom_text(aes(label = abbrev), size = 2.5, color = "black") +
  # 设置颜色渐变,这里用viridis色系,好看还对色弱友好
  scale_fill_viridis_c(name = "犯罪数量", option = "plasma", na.value = "lightgray") +
  # 去掉默认的坐标轴,让地图更清爽
  theme_void() +
  # 加上标题和副标题
  labs(title = "美国各州犯罪数量分布",
       subtitle = "基于value_x统计数据") +
  # 调整标题和图例的样式
  theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
        plot.subtitle = element_text(hjust = 0.5, size = 12),
        legend.title = element_text(size = 10),
        legend.position = "right")
小Tips帮你避坑
  • 如果有些州没有数据,地图上会显示你设置的na.value颜色(上面代码里是浅灰色),你可以改成自己喜欢的颜色
  • 如果你的数据包含华盛顿特区(DC),不用担心,fiftystater已经包含了它的地图数据
  • 要是觉得颜色渐变不够贴合你的需求,可以换scale_fill_gradient()自定义渐变颜色

这样画出来的图就是颜色深浅对应犯罪数量的美国地图,和你想要的效果应该完全匹配啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:39:44