我试图弄清楚非常简单的数据,这是一种痛苦的问题。我在美国东部有以下邮政编码。这是由数据组成,但你明白了。
Zip Freq
11101 10
10014 15
11238 400
等。大约100行。 Freq的值范围为0-1000,这些是我想用来确定每个邮政编码颜色的值。理想情况下,我也希望地图能够集中在美国东部而不是整个国家。
我想用这些数据和每个邮政编码制作一个等级,但我无法弄清楚如何导入邮政编码shapefile。我试过了this tutorial但是我在fortify()步骤中遇到了一个错误,我无法超越。我不确定该教程的方法是否是最好的方法。
ggplot2似乎来自州和县,但我无法弄清楚如何通过邮政编码进行映射。 (最终我将通过人口普查区域进行映射,但现在我只想学习如何使用shapefile来获取邮政编码和这个简单的数据集)
我为choroplethr找到的所有资源都使用现已弃用的函数。我花了几个小时追逐我的尾巴,努力使用它,我非常沮丧,所以任何帮助将不胜感激。
答案 0 :(得分:11)
感谢您使用choroplethr
,我很抱歉zip_map
的弃用导致了您的问题。我已将所有与ZIP相关的函数移到一个名为choroplethrZip的单独打包中。
Choroplethr的旧版本将ZIP渲染为散点图,而不是等值线。将它们渲染为正确的等值线需要一个对于CRAN来说太大的地图(~60MB),这就是为什么它只能通过github获得。
我链接到上面的github页面有3个小插图。基本上,函数zip_choropleth
应该完全符合您的要求,并且像所有其他choroplethr
函数一样工作。您想使用state_zoom
放大东海岸州:
# use the devtools package from CRAN to install choroplethrZip from github
install.packages("devtools")
library(devtools)
install_github('arilamstein/choroplethrZip@v1.3.0')
library(choroplethrZip)
data(df_pop_zip)
# ec = east coast
ec_states = c("maine", "new hampshire", "massachusetts", "rhode island", "connecticut",
"new york", "new jersey", "delaware", "maryland",
"virginia", "north carolina", "south carolina", "georgia", "florida",
"pennsylvania", "district of columbia", "vermont", "west virginia")
zip_choropleth(df_pop_zip,
state_zoom = ec_states,
title = "2012 ZCTA Population Estimates",
legend = "Population") + coord_map()
生成的地图基本上是不可读的,因为拉链很小,你可以看到的只是边框。如果要删除边框,请尝试以下操作:
choro = choroplethrZip::ZipChoropleth$new(df_pop_zip)
choro$prepare_map()
data(zip.regions)
choro$legend = "Population"
ec_zips = zip.regions[zip.regions$state.name %in% ec_states, "region"]
ec_df = choro$choropleth.df[choro$choropleth.df$region %in% ec_zips, ]
ec_plot = choro$render_helper(ec_df, "", choro$theme_clean()) +
ggtitle("2012 ZCTA Population Estimates")
ec_plot + coord_map()
将来,我可能会添加一个选项,可以更轻松地渲染没有边框的地图。但是现在(版本1.3.0)这是我能看到的最简单的方法,基本上我在幕后制作国家邮政编码,它们本身是无边框渲染的。
请注意coord_map
只会强制进行墨卡托投影。