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

