【问题标题】:Making a zip code choropleth in R using ggplot2 and ggmap使用 ggplot2 和 ggmap 在 R 中制作邮政编码 choropleth
【发布时间】:2023-04-06 13:19:01
【问题描述】:

我正在尝试制作非常简单的数据的等值线,这有点让人头疼。我在美国东部有以下邮政编码。这是虚构的数据,但你明白了。

Zip    Freq
11101    10
10014    15
11238   400

等等。大约 100 行。 Freq 的值范围为 0-1000,这些是我想用来确定每个邮政编码颜色的值。理想情况下,我还希望地图专注于美国东部而不是整个国家。

我想用这些数据和每个邮政编码制作一个等值线,但我不知道如何导入邮政编码 shapefile。我已经尝试过this tutorial,但我在 fortify() 步骤中遇到了一个我无法超越的错误。我不确定该教程的方法是否是最好的方法。

ggplot2 似乎与州和县一起提供,但我不知道如何按邮政编码进行映射。 (最终我将按人口普查区进行地图绘制,但现在我只想学习如何将 shapefile 用于邮政编码和这个简单的数据集)

我为 choroplethr 找到的所有资源都使用现已弃用的功能。我花了几个小时追着我的尾巴努力使用它,我很沮丧,所以任何帮助都将不胜感激。

【问题讨论】:

  • 试试这个包。它让你可以轻松地做你想做的事cran.r-project.org/web/packages/choroplethr/choroplethr.pdf
  • 感谢您的回复。 Choroplethr 执行此操作的函数 zip_map 在当前版本中已弃用。当我尝试使用它时,我收到消息“从 choropleth 3.0.0 版开始不推荐使用此功能。请改用 ?zip_choropleth。”但是当我尝试使用 zip_choropleth 时,它说该功能不存在!
  • 哦,我认为它分支到了一个单独的包中:github.com/arilamstein/choroplethrZip
  • 这还不能通过 R 获得。至少我尝试安装 choroplethrZip,但它说它不可用。还有其他想法吗?
  • 如果您不需要填充拉链,您可以使用this technique。这是一个似乎已更新的nice tutorial。一些人(包括我自己)会争辩说,“填充”地图具有误导性,因为一些大(区域)邮政编码并不密集——这会造成解释上的偏差——因此已经创建了诸如 rcstatebin 之类的包。

标签: r ggplot2 ggmap choropleth choroplethr


【解决方案1】:

感谢您使用choroplethr,很抱歉zip_map 的弃用给您带来了问题。我已将所有与 ZIP 相关的功能移动到一个名为 choroplethrZip 的单独打包中。

旧版本的 choroplethr 将 ZIP 呈现为散点图,而不是 choropleth。将它们渲染为适当的 choropleths 需要一个对于 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 只是强制墨卡托投影。

【讨论】:

  • 请注意,截至 2020 年 8 月,1.5.0 已发布,所以install_github('arilamstein/choroplethrZip@v1.5.0') 现在
猜你喜欢
  • 1970-01-01
  • 2011-07-09
  • 2016-01-14
  • 2016-05-16
  • 2021-02-24
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多