【问题标题】:Using ggplot2 to Fill in Counties Based on FIPS Code使用ggplot2根据FIPS代码填写县
【发布时间】:2019-05-04 12:11:05
【问题描述】:

我希望从我感兴趣的 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 代码的向量。为了完成这项工作,我必须创建一个虚假的“价值”向量,以便突出显示 OOTFIPS 向量中所需的县。

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

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

但它返回的地图甚至不是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 代码指定和突出显示县?

【问题讨论】:

  • 您是否检查过this 之类的答案,以至少生成正确的情节?
  • @liborm 我已经把它整理出来了,它是代码的底部!不过谢谢:)

标签: r ggplot2 choropleth


【解决方案1】:

我将此称为数据整理的直接示例。您需要找到所有需要的数据在哪里。也就是说,map_data("county") 缺少 fips,那么您需要在哪里找到它 - 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"))

这会产生

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2015-02-01
    相关资源
    最近更新 更多