使用ggplot2根据FIPS代码填写县

Using ggplot2 to Fill in Counties Based on FIPS Code

我希望根据我感兴趣的 FIPS 代码向量在 ggplot2 美国地图上填写县。我想使用 ggplot2 及其各种功能(例如 geom_map 和 geom_polygon 因为它们似乎在定制方面提供了很大的灵活性,但是我只设法使用 choropleth 完成了一个基本版本。基本版本是:

library(choroplethr)
library(ggplot2)
library(dplyr)
library(tidyverse)
library(choroplethrMaps)

onesvec <- rep(100000, 210)
county <- data.frame(region = OOTFIPS, value = onesvec)

data(county)

choro              = CountyChoropleth$new(county)
choro$ggplot_scale = scale_fill_brewer(name="Population", palette=2, drop=FALSE)
choro$render() 

得到 this。这里 OOTFIPS 是 FIPS 代码的向量。为了完成这项工作,我不得不创建一个伪造的 "value" 向量,以便它将突出显示 OOTFIPS 向量中所需的县。

从 ggplot2 开始,当我第一次通过时,我什至无法获得准确的地图。我已经开始使用此代码

counties <- map_data("county")
ggplot() + geom_polygon(data = counties, aes(x = long, y = lat))

但它 returns 甚至不是 geographically accurate 的地图。关于如何制作类似于第一张图片但使用第二张图片的技术的地图有什么建议吗?

谢谢!

ExampleFIPS <- data.frame("FIPS" = c(19097, 17155, 50009, 27055, 39143, 55113, 44003, 55011, 19105, 46109, 19179, 55099, 51057))

编辑:这是我所能做到的

states <- map_data("state")
counties <- map_data("county")

us_base <- ggplot(data = states, mapping = aes(x = long, y = lat, group = group)) + coord_fixed(1.3) + 
  geom_polygon(color = "black", fill = "white")


us_base + theme_void() + geom_polygon(data = counties, fill = NA, color = "gray") +
  geom_polygon(color = "black", fill = NA)

但现在的问题是如何在向量中指定和突出显示具有 FIPS 代码的县?

我将其称为数据整理的直接示例。您需要找到所有需要的数据所在的位置。也就是说,map_data("county") 缺少 fips,那么您需要 google 在哪里找到它 - maps::county.fips,检查格式,从中创建数据框,然后加入并使用它。

library(tidyverse)

ExampleFIPS <- c(19097, 17155, 50009, 27055, 39143, 55113, 44003, 55011, 19105, 46109, 19179, 55099, 51057)

maps::county.fips %>%
  as.tibble %>% 
  extract(polyname, c("region", "subregion"), "^([^,]+),([^,]+)$") ->
  dfips

map_data("county") %>% 
  left_join(dfips) ->
  dall

dall %>% 
  mutate(is_example = fips %in% ExampleFIPS) %>% 
  ggplot(aes(long, lat, group = group)) +
  geom_polygon(aes(fill=is_example), color="gray70") +
  coord_map() +
  scale_fill_manual(values=c("TRUE"="red", "FALSE"="gray90"))

这会产生