[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) [![Signed by](https://img.shields.io/badge/Keybase-Verified-brightgreen.svg)](https://keybase.io/hrbrmstr) ![Signed commit %](https://img.shields.io/badge/Signed_Commits-100%25-lightgrey.svg) [![Linux build Status](https://travis-ci.org/hrbrmstr/statebins.svg?branch=master)](https://travis-ci.org/hrbrmstr/statebins) [![Windows build status](https://ci.appveyor.com/api/projects/status/github/hrbrmstr/statebins?svg=true)](https://ci.appveyor.com/project/hrbrmstr/statebins) [![Coverage Status](https://codecov.io/gh/hrbrmstr/statebins/branch/master/graph/badge.svg)](https://codecov.io/gh/hrbrmstr/statebins) [![cran checks](https://cranchecks.info/badges/worst/statebins)](https://cranchecks.info/pkgs/statebins) [![CRAN status](https://www.r-pkg.org/badges/version/statebins)](https://www.r-pkg.org/pkg/statebins) ![Minimal R Version](https://img.shields.io/badge/R%3E%3D-3.5.0-blue.svg) ![License](https://img.shields.io/badge/License-MIT-blue.svg) # statebins Create United States Uniform Cartogram Heatmaps ## Description The cartogram heatmaps generated by the included methods are an alternative to choropleth maps for the United States and are based on work by the Washington Post graphics department in their report on “The states most threatened by trade” (). “State bins” preserve as much of the geographic placement of the states as possible but have the look and feel of a traditional heatmap. Functions are provided that allow for use of a binned, discrete scale, a continuous scale or manually specified colors depending on what is needed for the underlying data. ## What’s Inside The Tin The following functions are implemented/datasets included: - `geom_statebins`: A statebins Geom - `state_tbl`: “State” abbreviation to name data frame - `theme_statebins`: Base statebins theme - `statebins`: (the original sole function in the package) Create a new ggplot-based “statebin” chart for USA states/territories ## Installation ``` r install.packages("statebins) # NOTE: CRAN version is 1.2.2 # or install.packages("statebins", repos = c("https://cinc.rud.is", "https://cloud.r-project.org/")) # or remotes::install_git("https://git.rud.is/hrbrmstr/statebins.git") # or remotes::install_git("https://git.sr.ht/~hrbrmstr/statebins") # or remotes::install_gitlab("hrbrmstr/statebins") # or remotes::install_bitbucket("hrbrmstr/statebins") # or remotes::install_github("hrbrmstr/statebins") ``` NOTE: To use the ‘remotes’ install options you will need to have the [{remotes} package](https://github.com/r-lib/remotes) installed. ## Usage All of the following examples use the [WaPo data](http://www.washingtonpost.com/wp-srv/special/business/states-most-threatened-by-trade/states.csv?cache=1). It looks like the columns they use are scaled data and I didn’t take the time to figure out what they did, so the final figure just mimics their output (including the non-annotated legend). ``` r library(statebins) library(cdcfluview) library(hrbrthemes) library(tidyverse) # current verison packageVersion("statebins") ## [1] '1.4.0' ``` ### The original wapo data ``` r adat <- read_csv(system.file("extdata", "wapostates.csv", package="statebins")) mutate( adat, share = cut(avgshare94_00, breaks = 4, labels = c("0-1", "1-2", "2-3", "3-4")) ) %>% statebins( value_col = "share", ggplot2_scale_function = scale_fill_brewer, name = "Share of workforce with jobs lost or threatened by trade" ) + labs(title = "1994-2000") + theme_statebins() ``` ### Continuous scale, legend on top ``` r statebins( adat, value_col = "avgshare01_07", name = "Share of workforce with jobs lost or threatened by trade", palette = "OrRd", direction = 1 ) + labs(x="2001-2007") + theme_statebins(legend_position="top") ``` ### Continuous scale, no legend ``` r statebins(adat, value_col = "avgshare08_12", palette = "Purples") + labs(x="2008-2010") + theme_statebins(legend_position = "none") ``` ### Mortality data (has Puerto Rico) ``` r # from: http://www.cdc.gov/nchs/fastats/state-and-territorial-data.htm dat <- read_csv(system.file("extdata", "deaths.csv", package="statebins")) statebins(dat, value_col = "death_rate", name="Per 100K pop") + labs(title="Mortality Rate (2010)") + theme_statebins() ``` ### Fertility data ``` r statebins(dat, value_col="fertility_rate", name="Per 100K pop", palette="PuBuGn") + labs(title="Fertility Rate (2010)") + theme_statebins() ``` ### Manual - perhaps good for elections? ``` r election_2012 <- suppressMessages(read_csv(system.file("extdata", "election2012.csv", package="statebins"))) mutate(election_2012, value = ifelse(is.na(Obama), "Romney", "Obama")) %>% statebins( font_size=4, dark_label = "white", light_label = "white", ggplot2_scale_function = scale_fill_manual, name = "Winner", values = c(Romney = "#2166ac", Obama = "#b2182b") ) + theme_statebins() ``` ### Rounded rects\! You can pass in a `grid::units()` call for the `radius` parameter. Slight curves: ``` r data(USArrests) USArrests$state <- rownames(USArrests) statebins(USArrests, value_col="Assault", name = "Assault", round=TRUE) + theme_statebins(legend_position="right") ``` Circles\! ``` r statebins(USArrests, value_col="Assault", name = "Assault", round=TRUE, radius=grid::unit(16, "pt"), palette="Reds", direction=1) + theme_statebins(legend_position="right") ``` ### Geom ``` r flu <- ili_weekly_activity_indicators(2017) ggplot(flu, aes(state=statename, fill=activity_level)) + geom_statebins() + coord_equal() + viridis::scale_fill_viridis( name = "ILI Activity Level ", limits=c(0,10), breaks=0:10, option = "magma", direction = -1 ) + facet_wrap(~weekend) + labs(title="2017-18 Flu Season ILI Activity Level") + theme_statebins(base_family = font_ps) + theme(plot.title=element_text(size=16, hjust=0)) + theme(plot.margin = margin(30,30,30,30)) ``` ### All the “states” `statebins` now has PR, VI & NYC (by name or abbreviation) so you can use them, too: ``` r library(statebins) library(tidyverse) library(viridis) data(USArrests) # make up some data for the example rownames_to_column(USArrests, "state") %>% bind_rows( data_frame( state = c("Virgin Islands", "Puerto Rico", "New York City"), Murder = rep(mean(max(USArrests$Murder),3)), Assault = rep(mean(max(USArrests$Assault),3)), Rape = rep(mean(max(USArrests$Rape),3)), UrbanPop = c(93, 95, 100) ) ) -> us_arrests statebins(us_arrests, value_col="Assault", ggplot2_scale_function = viridis::scale_fill_viridis) + labs(title="USArrests + made up data") + theme_statebins("right") ```