Home > Software design >  Create a bivariate choropleth map using Tidycensus?
Create a bivariate choropleth map using Tidycensus?

Time:06-17

It is quite easy to create a choropleth using the tidycensus` R package as discussed in Kyle Walker's "Miami Median Income in choropleth using tidycensus R package

miami_income <- get_acs(geography = "tract", year = 2020,
                        variables  = c(
                         Median_Income = "B19013_001"
                        ),
                        state = "FL", county = "Miami-Dade County",
                        geometry = TRUE)
plot(miami_income["estimate"])

Bivariate choropleth?

There is a recently developed biscale package by Christopher Prener, Ph.D. that might be useful. Example from biscale package example : race and income in St. Louis

## stl_race_income example data in biscale package
stlouis_race_income_bivar <- 
  biscale::bi_class(stl_race_income, x = pctWhite, y = medInc, style = "quantile", dim = 3)
# create map
ggplot()  
  geom_sf(data = stlouis_race_income_bivar, 
          mapping = aes(fill = bi_class), color = "white", 
          size = 0.1, show.legend = FALSE)  
  bi_scale_fill(pal = "GrPink", dim = 3)  
  labs(
    title = "Race and Income in St. Louis, MO",
    subtitle = "Gray Pink (GrPink) Palette"
  )  
  bi_theme()

CodePudding user response:

This was easier than I thought. Posting because I did not see any search hits combining 'tidycensus' and 'bivariate choropleth' (two-variable heat map) that depicted images. Please note that Kyle Walker discusses concerns about margins-of-error at "Median Rent and Income in Miami, Florida

#### Census API key
## Only need this line because API key stored in .Renviron
## If not stored, get Census API key at http://api.census.gov/data/key_signup.html then run
## census_api_key("PLACE CENSUS KEY HERE", install = TRUE)
## per https://rdrr.io/cran/tidycensus/man/census_api_key.html
Sys.getenv("CENSUS_API_KEY")
## remotes::install_github("chris-prener/biscale")

library(tidycensus)
library(cowplot)
library(sf)
library(biscale)
library(dplyr)

miami_rent_income <- get_acs(geography = "tract", year = 2020,
                             variables  = c(
                              Median_Income = "B19013_001",
                              Median_Rent = "B25031_001"
                             ),
                             state = "FL", county = "Miami-Dade County",
                             geometry = TRUE,
                             output = "wide")

miami_rent_income <- miami_rent_income %>% 
  rename(Median_Income = Median_IncomeE,
         Median_Rent = Median_RentE)

miami_rent_income_bivar <- 
  biscale::bi_class(miami_rent_income, 
                    x = Median_Income, 
                    y = Median_Rent, style = "quantile", dim = 3)
# create map
miami_rent_income_bivar_map <- 
  ggplot()  
  geom_sf(data = miami_rent_income_bivar, 
          mapping = aes(fill = bi_class), color = "white", 
          size = 0.1, show.legend = FALSE)  
  bi_scale_fill(pal = "GrPink", dim = 3)  
  labs(
    title = "Median Rent and Income in Miami, FL",
    subtitle = "Census American Community Survey (2020)"
  )  
  bi_theme()

miami_rent_income_bivar_legend <- bi_legend(pal = "GrPink",
                    dim = 3,
                    xlab = "Higher Median Income",
                    ylab = "Higher Median Rent ",
                    size = 8)

# combine map with legend
miami_rent_income_bivar_map2 <- ggdraw()  
  draw_plot(miami_rent_income_bivar_map, 0, 0, 1, 1)  
  draw_plot(miami_rent_income_bivar_legend, 0.2, .65, 0.2, 0.2)

miami_rent_income_bivar_map2
  • Related