【问题标题】:How do I add more data for each census tracts in the map?如何为地图中的每个人口普查区域添加更多数据?
【发布时间】:2020-06-12 03:46:11
【问题描述】:

我能够使用 tidycensustigris 准备一个县的人口普查区地图(显示所有人口普查区)。我在一个名为demography 的单独数据框中有一些数据,其中包含countytractx.foreclosure_filingdelinquent_parcels 4 列。

如何创建仅包含 demography(仅 19 个区域)数据框中的那些区域的地图,并在地图中为这些 (19 个区域) 显示 x.foreclosure_filingdelinquent_parcels 的值?

人口统计数据框如下所示:

County      tract           X.foreclosure_filings   delinquent_parcels
1 Cuyahoga 1401.00                     8              13.52
2 Cuyahoga 1403.01                    18              22.25
3 Cuyahoga 1403.02                    18              11.96
4 Cuyahoga 1404.00                    19               8.44
5 Cuyahoga 1405.00                    27              10.93
6 Cuyahoga 1407.01                    17              13.77

代码

library(tidycensus)
library(tidyverse)
options(tigris_use_cache = TRUE)


clevelandhts <- get_acs(state = "OH", county = "Cuyahoga", geography = "tract", 
                        variables = "B19013_001", geometry = TRUE)

View(clevelandhts)
clevelandhts %>%
  ggplot(aes(fill = estimate)) + 
  geom_sf(color = NA) + 
  coord_sf(crs = 26917) + 
  scale_fill_viridis_c(option = "magma")

【问题讨论】:

    标签: r leaflet tigris tidycensus


    【解决方案1】:

    您可以使用fuzzy_join 将两个数据框合并在一起,使用str_detect 可以从demography 中找到包含在NAME 中的NAME 中的人口普查区字符串@ 987654332@。要将地图中不同列的信息作为标签包含在内,请使用geom_sf_label

    编辑:填充颜色现在基于X.foreclosure_filings

    library(tidycensus)
    library(tidyverse)
    library(fuzzyjoin)
    
    options(tigris_use_cache = TRUE)
    
    demography$tract <- as.character(demography$tract)
    
    census_api_key("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
    
    clevelandhts <- get_acs(state = "OH", county = "Cuyahoga", geography = "tract", 
                            variables = "B19013_001", geometry = TRUE)
    
    clevelandhts %>%
      fuzzy_join(demography, by = c("NAME" = "tract"), match_fun = str_detect) %>%
      ggplot(aes(fill = X.foreclosure_filings)) + 
      geom_sf(color = NA) + 
      coord_sf(crs = 26917) + 
      scale_fill_viridis_c(option = "magma") +
      geom_sf_label(aes(label = X.foreclosure_filings))
    

    情节

    数据

    demography <- read.table(
      text = "County      tract           X.foreclosure_filings   delinquent_parcels
     Cuyahoga 1401.00                     8              13.52
     Cuyahoga 1403.01                    18              22.25
     Cuyahoga 1403.02                    18              11.96
     Cuyahoga 1404.00                    19               8.44
     Cuyahoga 1405.00                    27              10.93
     Cuyahoga 1407.01                    17              13.77", header = T)
    

    编辑(2020 年 2 月 29 日)

    要在下方添加街道地图,您可以执行以下操作。

    在此示例中,我在输入 API 密钥后使用 Google 街道地图。 location 参数是本例特有的,但在加入 demography 表后,可以从 clevelandhts 获取框边界。同样,这只是一个演示。如果您需要进一步的帮助,我建议您单独发布一个问题。

    # Requires Google API key
    county_map <- get_map(location = c(-81.57,41.49,-81.52,41.56), maptype = "roadmap", source = "google")
    
    full_data <- fuzzy_join(clevelandhts, demography, by = c("NAME" = "tract"), match_fun = str_detect)
    
    ggmap(county_map) +
      geom_sf(data = full_data, inherit.aes = FALSE, aes(fill = X.foreclosure_filings)) + 
      scale_fill_viridis_c(option = "magma", alpha = .2) +
      geom_sf_label(data = full_data, aes(label = X.foreclosure_filings), inherit.aes = FALSE)
    

    【讨论】:

    • @如何根据 {x.foreclosure_filings} 的值而不是 {clevelandhts } 数据框中的变量 {B19013_001} 给出颜色?换句话说,只使用美国人口普查中的人口普查区域边界,并在地图中仅绘制我自己的数据 {demography}?
    • 填充人口普查区的颜色基于estimate(这就是您的原始代码中的内容)。您可以将其更改为另一个变量。要使fill 颜色基于X.foreclosure_filings,您可以执行以下操作:ggplot(aes(fill = X.foreclosure_filings))
    • 完美。有没有办法在地图中添加更多图层 - 我需要添加街道。为了让街道可见,我必须让颜色有点透明。
    • @Posh - 要让您的填充颜色透明,您可以添加alpha,例如:scale_fill_viridis_c(option = "magma", alpha = .2)。使用您当前的地图尝试一下,以可视化它的外观。至于街道,是的 - 您可以添加街道。或许可以看看使用 Openstreetmap 的 blogdemo,或查看使用 Google Map (ggmap) 的 this 教程。您可能需要一个关于添加街道地图的单独问题。
    • 我阅读了在地图中添加街道图层的所有链接和教程,但仍然无法这样做。 ggplot() + + geom_sf(data = small_streets$osm_lines, + inherit.aes = FALSE, + color = "black", + size = .4, + alpha = .8) + + coord_sf(xlim = c(-81.52, -81.61), + ylim = c(41.48, 41.55), + expand = FALSE) 这不会为我们已经创建的地图生成任何街道地图(在您的回答中)。
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2014-11-22
    • 2012-08-27
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多