Как добавить больше данных для каждого участка переписи на карте? - PullRequest
0 голосов
/ 28 февраля 2020

Мне удалось подготовить карту переписных участков округа (с указанием всех переписных участков), используя tidycensus и tigris. У меня есть некоторые данные в отдельном фрейме данных под названием demography, который содержит 4 столбца county, tract, x.foreclosure_filing и delinquent_parcels.

Как создать карту только тех участков, которые находятся в фрейме данных demography (только 19 путей) и показывают значения x.foreclosure_filing и delinquent_parcels для этих (19) участков в карта?

фрейм демографических данных выглядит следующим образом:

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")

1 Ответ

0 голосов
/ 28 февраля 2020

Вы можете использовать fuzzy_join, чтобы объединить два фрейма данных вместе с str_detect, чтобы найти строку переписного участка из demography, содержащуюся в NAME в clevelandhts. Чтобы включить информацию о различных столбцах на карте в качестве меток, используйте 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))

Участок

map with census tracts

Данные

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)

Редактировать ( 2/29/20) :

Чтобы добавить карту улиц внизу, вы можете сделать следующее.

В этом примере я использую карту улиц Google после ввода ключа API. Аргумент location для этого примера задается c, но границы ящика можно получить из clevelandhts после объединения с таблицей demography. Опять же, это просто демо. Если вам нужна дополнительная помощь, я бы посоветовал вам опубликовать отдельный вопрос.

# 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)

map with street view

...