--- title: "statebins" author: "Prof. Eric A. Suess" date: "November 27, 2023" output: format: html --- This notebook introduces the ideas of statebins. This is for working on the **Project**. Find some economic data from the [FRED](https://fred.stlouisfed.org/categories/3008) website. For example take the data from a map and make a statebin from it. Use the [socviz](https://socviz.co) [Chapter 7](https://socviz.co/maps.html#maps) [Section 3](https://socviz.co/maps.html#statebins) as a reference. From the Preface of the book load the following packages, install and load the *socviz* and *statebin* package from the authors github. ```{r} library(pacman) p_load("tidyverse", "broom", "coefplot", "cowplot", "gapminder", "GGally", "ggrepel", "ggridges", "gridExtra", "here", "interplot", "margins", "maps", "mapproj", "mapdata", "MASS", "quantreg", "rlang", "scales", "survey", "srvyr", "viridis", "viridisLite", "devtools", "socviz", "statebins") ``` ```{r} data("election") election %>% select(state, total_vote, r_points, pct_trump, party, census) %>% sample_n(5) ``` ```{r} # Hex color codes for Dem Blue and Rep Red party_colors <- c("#2E74C0", "#CB454A") p0 <- ggplot(data = subset(election, st %nin% "DC"), mapping = aes(x = r_points, y = reorder(state, r_points), color = party)) p1 <- p0 + geom_vline(xintercept = 0, color = "gray30") + geom_point(size = 2) p2 <- p1 + scale_color_manual(values = party_colors) p3 <- p2 + scale_x_continuous(breaks = c(-30, -20, -10, 0, 10, 20, 30, 40), labels = c("30\n (Clinton)", "20", "10", "0", "10", "20", "30", "40\n(Trump)")) p3 + facet_wrap(~ census, ncol=1, scales="free_y") + guides(color=FALSE) + labs(x = "Point Margin", y = "") + theme(axis.text=element_text(size=8)) ``` ```{r} library(maps) us_states <- map_data("state") head(us_states) dim(us_states) p <- ggplot(data = us_states, mapping = aes(x = long, y = lat, group = group)) p + geom_polygon(fill = "white", color = "black") p <- ggplot(data = us_states, aes(x = long, y = lat, group = group, fill = region)) p + geom_polygon(color = "gray90", size = 0.1) + guides(fill = FALSE) p <- ggplot(data = us_states, mapping = aes(x = long, y = lat, group = group, fill = region)) p + geom_polygon(color = "gray90", size = 0.1) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) + guides(fill = "none") ``` ```{r} election$region <- tolower(election$state) us_states_elec <- left_join(us_states, election) p <- ggplot(data = us_states_elec, aes(x = long, y = lat, group = group, fill = party)) p + geom_polygon(color = "gray90", size = 0.1) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) ``` ```{r} p0 <- ggplot(data = us_states_elec, mapping = aes(x = long, y = lat, group = group, fill = party)) p1 <- p0 + geom_polygon(color = "gray90", size = 0.1) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) p2 <- p1 + scale_fill_manual(values = party_colors) + labs(title = "Election Results 2016", fill = NULL) p2 + theme_map() ``` Trump vote default colors not so good. ```{r} p0 <- ggplot(data = us_states_elec, mapping = aes(x = long, y = lat, group = group, fill = pct_trump)) p1 <- p0 + geom_polygon(color = "gray90", size = 0.1) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) p1 + labs(title = "Trump vote") + theme_map() + labs(fill = "Percent") p2 <- p1 + scale_fill_gradient(low = "white", high = "#CB454A") + labs(title = "Trump vote") p2 + theme_map() + labs(fill = "Percent") ``` Winning percentage, again default colors are not so good. ```{r} p0 <- ggplot(data = us_states_elec, mapping = aes(x = long, y = lat, group = group, fill = d_points)) p1 <- p0 + geom_polygon(color = "gray90", size = 0.1) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) p2 <- p1 + scale_fill_gradient2() + labs(title = "Winning margins") p2 + theme_map() + labs(fill = "Percent") p3 <- p1 + scale_fill_gradient2(low = "red", mid = scales::muted("purple"), high = "blue", breaks = c(-25, 0, 25, 50, 75)) + labs(title = "Winning margins") p3 + theme_map() + labs(fill = "Percent") ``` Without Washington Dc ```{r} p0 <- ggplot(data = subset(us_states_elec, region %nin% "district of columbia"), aes(x = long, y = lat, group = group, fill = d_points)) p1 <- p0 + geom_polygon(color = "gray90", size = 0.1) + coord_map(projection = "albers", lat0 = 39, lat1 = 45) p2 <- p1 + scale_fill_gradient2(low = "red", mid = scales::muted("purple"), high = "blue") + labs(title = "Winning margins") p2 + theme_map() + labs(fill = "Percent") ``` Statebins Fix this using ggplot() and geom_statebins() ```{r} library(statebins) election %>% statebins(value_col = "pct_trump", name = "Percent Trump", palette = "Reds", direction = 1) + theme_statebins(legend_position="top") state_data <- filter(election, st %in% "DC") state_data election %>% statebins(value_col = "pct_clinton", name = "Percent Clinton", palette = "Blues", direction = 1) + theme_statebins(legend_position="top") ```