Data visualization

In-class example

Here’s the code we’ll be using in class. Download it and store it with the rest of your materials for this course. If simply clicking doesn’t trigger download, you should right-click and select “save link as…”.

Presidential elections code-through

We’re working with elections_historic from the socviz package:

library(socviz)
elections_historic
# A tibble: 49 × 19
   election  year winner      win_party ec_pct popular_pct popular_margin  votes
      <int> <int> <chr>       <chr>      <dbl>       <dbl>          <dbl>  <int>
 1       10  1824 John Quinc… D.-R.      0.322       0.309        -0.104  1.13e5
 2       11  1828 Andrew Jac… Dem.       0.682       0.559         0.122  6.43e5
 3       12  1832 Andrew Jac… Dem.       0.766       0.547         0.178  7.03e5
 4       13  1836 Martin Van… Dem.       0.578       0.508         0.142  7.63e5
 5       14  1840 William He… Whig       0.796       0.529         0.0605 1.28e6
 6       15  1844 James Polk  Dem.       0.618       0.495         0.0145 1.34e6
 7       16  1848 Zachary Ta… Whig       0.562       0.473         0.0479 1.36e6
 8       17  1852 Franklin P… Dem.       0.858       0.508         0.0695 1.61e6
 9       18  1856 James Buch… Dem.       0.588       0.453         0.122  1.84e6
10       19  1860 Abraham Li… Rep.       0.594       0.396         0.101  1.86e6
# ℹ 39 more rows
# ℹ 11 more variables: margin <int>, runner_up <chr>, ru_part <chr>,
#   turnout_pct <dbl>, winner_lname <chr>, winner_label <chr>, ru_lname <chr>,
#   ru_label <chr>, two_term <lgl>, ec_votes <dbl>, ec_denom <dbl>

We start with ggplot():

ggplot()

Tell it what data we are plotting:

ggplot(elections_historic)

Map the x and y-axis within aes():

ggplot(elections_historic, aes(x = popular_pct, y = ec_pct))

Add a point geometry:

ggplot(elections_historic, aes(x = popular_pct, y = ec_pct)) + geom_point()

Go back and map color and shape aesthetics:

ggplot(elections_historic, aes(x = popular_pct, y = ec_pct,
                               color = win_party, shape = two_term)) + geom_point()

Add labels by mapping the label aesthetic and adding a geom_label geometry:

ggplot(elections_historic, aes(x = popular_pct, y = ec_pct, label = winner_label,
                               color = win_party, shape = two_term, 
                               label = winner_label)) + 
  geom_point() +  
  geom_text() 

Bells and whistles

Here’s some other stuff I’m adding to make this graph better:

library(ggrepel)

ggplot(elections_historic, aes(x = popular_pct, y = ec_pct, label = winner_label,
                               color = win_party, shape = two_term, 
                               label = winner_label)) + 
  geom_point() +  
  geom_text_repel() + 
  labs(x = "Percent of popular vote", 
       y = "Percent of Electoral College vote", 
       title = "Presidential Elections: Popular & Electoral College Margins",
       subtitle = "1824-2016", color = NULL, size = NULL) + 
  scale_y_continuous(labels = scales::percent) + 
  scale_x_continuous(labels = scales::percent) + 
  scale_color_manual(values = c(yellow, red, blue, "gray")) + 
  geom_hline(yintercept = 0.5, size = 1.4, color = "gray80") +
    geom_vline(xintercept = 0.5, size = 1.4, color = "gray80") +  theme(legend.position = "none")