如何在R语言中利用Excel数据创建Choropleth地图?
用R实现邮编级别的Choropleth地图(基于频率数据)
方法一:用choroplethr(最简便,专门适配邮编地图)
choroplethr自带美国邮编的地理边界数据,不用自己找 shp 文件,完美匹配你的场景:
- 安装并加载依赖包
先装好用到的工具包,包括读Excel的readxl和处理邮编地图的choroplethr、choroplethrZip:
install.packages(c("readxl", "choroplethr", "choroplethrZip")) library(readxl) library(choroplethr) library(choroplethrZip)
- 读取Excel数据
把代码里的文件路径换成你实际的Excel文件路径:
df <- read_excel("你的数据文件路径.xlsx")
- 调整数据格式
choroplethr要求数据必须有两列:region(邮编,要转成字符型,防止丢失前导零)和value(频率值),所以做个简单调整:
colnames(df) <- c("region", "value") df$region <- as.character(df$region)
- 生成基础地图
直接调用zip_choropleth就能出图,还能指定标题或者缩小显示范围(比如只看某一个州):
# 生成全国范围的邮编地图 zip_choropleth(df, title = "各邮编区域频率分布", legend = "频率") # 如果只需要看特定州,比如堪萨斯州(KS),加个state_zoom参数 zip_choropleth(df, title = "堪萨斯州邮编区域频率分布", legend = "频率", state_zoom = "kansas")
- 自定义样式(可选)
想换个好看的配色?结合ggplot的颜色标尺就行,比如用色盲友好的viridis配色:
zip_choropleth(df, title = "各邮编区域频率分布", legend = "频率") + scale_fill_viridis_c(option = "plasma", direction = -1)
方法二:用ggplot2(需自行准备邮编边界数据)
如果一定要用ggplot,得先自己搞到美国邮编的shp文件(比如从人口普查局下载),然后做空间连接:
- 读取shp文件:
sf::st_read("zip_codes.shp") - 把你的数据和shp文件按邮编关联:
merged_data <- merge(zip_shp, df, by.x = "ZIPCODE", by.y = "Zip") - 用ggplot绘制:
library(ggplot2) library(sf) ggplot(merged_data) + geom_sf(aes(fill = Frequency)) + scale_fill_gradient(low = "lightblue", high = "darkblue") + labs(title = "各邮编区域频率分布", fill = "频率") + theme_minimal()
这种方法步骤更繁琐,优先推荐choroplethr。
内容的提问来源于stack exchange,提问作者ZapRowsdower
相关产品推荐
相关产品推荐

