--- title: "Introducing urbnmapr" author: "Vignette Author" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Vignette Title} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set(echo = TRUE) knitr::opts_chunk$set(warning = FALSE) knitr::opts_chunk$set(message = FALSE) options(scipen = 999) ``` The `urbnmapr` package provides state, county, and other shapefiles in `tibble` format that is compatible to map with `ggplot2`. Shapefiles include Alaska and Hawaii, transformed to be displayed as insets within the continental United States. This package is heavily inspired by and derived in part from the [fiftystater package](https://cran.r-project.org/package=fiftystater) by William Murphy. In contrast, `urbnmapr`: - Uses shapefiles from the US Census Bureau - Converts the shapefile data to a `tibble` data frame - Adds various identifiers for merging - Includes a county-level shapefile ## Getting data There are two methods for accessing map data in `urbnmapr`. First, `urbnmapr` contains two `tibble` data frames, `states` and `counties`, for easily accessing simple state and county map data. The `states` and `counties` tibbles can be used with `geom_polygon()` and `coord_map()` to create base maps of the continental United States, with Alaska and Hawaii displayed as insets: ```{r blank-states} library(tidyverse) library(urbnmapr) states %>% ggplot(aes(long, lat, group = group)) + geom_polygon(fill = "grey", color = "#ffffff", size = 0.25) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) ``` ```{r blank-counties} counties %>% ggplot(aes(long, lat, group = group)) + geom_polygon(fill = "grey", color = "#ffffff", size = 0.05) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) ``` Second, the function `get_urbn_map()` accesses additional maps including "ccdf", which includes elided territories roughly positioned in the direction of their true location, and "territories_counties", which includes territories below the continuous 48 states. ```{r blank-territories-counties} ccdf <- get_urbn_map(map = "territories_counties") ccdf %>% ggplot(aes(long, lat, group = group)) + geom_polygon(fill = "grey", color = "#ffffff", size = 0.25) + scale_x_continuous(limits = c(-141, -55)) + scale_y_continuous(limits = c(24, 50)) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) ``` ## Merging data All tibbles include various identifiers to simplify merging data. The states `states` tibble contains `state_fips`, `state_abbv`, and `state_name`. The `counties` tibble contains `county_fips`, `state_abbv`, `state_fips`, `county_name`, and `state_name`. Both tibbles can be piped into `ggplot2` to create a choropleth map. ```{r us-choropleth} statedata %>% left_join(states, by = "state_name") %>% ggplot(mapping = aes(long, lat, group = group, fill = horate)) + geom_polygon(color = "#ffffff", size = 0.25) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) + labs(fill = "Homeownership rate") ``` ```{r county} household_data <- left_join(countydata, counties, by = "county_fips") household_data %>% ggplot(aes(long, lat, group = group, fill = medhhincome)) + geom_polygon(color = "#ffffff", size = 0.05) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) ``` ## Labels The function `get_urbn_labels()` accesses additional labels including "ccdf", which includes elided territories roughly positioned in the direction of their true location, and "territories_counties", which includes territories below the continuous 48 states. ```{r blank-ccdf-labels} library(tidyverse) library(urbnmapr) ccdf <- get_urbn_map(map = "ccdf") ccdf_labels <- get_urbn_labels(map = "ccdf") ccdf %>% ggplot() + geom_polygon(aes(long, lat, group = group), fill = "grey", color = "#ffffff", size = 0.25) + geom_text(data = ccdf_labels, aes(long, lat, label = state_abbv), size = 3) + scale_x_continuous(limits = c(-141, -55)) + scale_y_continuous(limits = c(24, 50)) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) ``` ## Styles `library(urbnmapr)` works well with the [library(urbnthemes)](https://github.com/UI-Research/urbnthemes) ```{r theme-state} library(urbnthemes) set_urbn_defaults(style = "map") statedata %>% left_join(states, by = "state_name") %>% ggplot(mapping = aes(long, lat, group = group, fill = horate)) + geom_polygon(color = "#ffffff", size = 0.25) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) + scale_fill_gradientn(labels = scales::percent) + theme(legend.position = "right", legend.direction = "vertical", legend.title = element_text(face = "bold", size = 11), legend.key.height = unit(.2, "in")) + labs(fill = "Homeownership rate") ``` ```{r theme-counties} household_data %>% filter(state_name %in% c("Virginia", "Maryland", "District of Columbia")) %>% ggplot(aes(long, lat, group = group, fill = medhhincome)) + geom_polygon(color = "#ffffff", size = 0.05) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) + scale_fill_gradientn(labels = scales::dollar) + theme(legend.position = "right", legend.direction = "vertical", legend.title = element_text(face = "bold", size = 11), legend.key.height = unit(.25, "in")) + labs(fill = "Median household income") ```