Layered Presentation of Graphics, revised

Here is my second post is about how to implement a layered presentation of a graphics. My previous implementation used the alpha transparency aesthetic to hide all but one point. But, now, rethink things, now for the 3rd time or so, I just subset the data associated with the first geom layer, leaving the global data complete.

I think it is more straight forward than messing around with alpha. Several folks brought up geom_blank() having looked at the previous implementation, but I didn’t find it necessary in this case if you are using last_plot() which I think it makes sense to do in this context. Still, geom_blank is good to know about.

This time around, I’ll do a little with labeling too. Before, I left labels as variable names, which wouldn’t really be acceptable in a presentation setting, at least with the present example.

Here again is the original inspiration:

And the goal is simply to write an implementation, with some data:

library(tidyverse)
library(gapminder)
my_data = gapminder %>% filter(continent == "Americas" & year == 2002)

Okay, the data is ready and packages loaded. Now for plotting:

Step 1: Just x-axis (explain it)

ggplot(my_data) +            # declare the data you want to use
  aes(x = gdpPercap) +       # declare the aesthetic mapping for x
  theme_bw(base_size = 20) + # we want label sizes to be a bit bigger
  labs(x = "Per capita GDP\n(US$, inflation-adjusted)") 

                             # instead of variable name, we give x axis a nice name

Step 2: Just y-axis (explain it)

last_plot() +        # we just add to the last plot
  aes(y = lifeExp) + # add the aesthetic mapping for y 
  labs(y = "Life Expectancy\n(years)") # a nice axis label

Step 3: Add 1 data point (explain it)

last_plot() + 
  geom_point(data = my_data %>% filter(country == "Chile"))   # declare the geom to add 

I use geom_point() to add the layer where Chile’s data is shown. I indicate that I want points to be added for onlly a subset of the data by specifying that with the data argument.

Step 4: Plot the rest of the data (explain it)

Add another geom_point() layer. This time, the data that will be used is the global data, as there is no data specified in the function.

last_plot() + 
  geom_point()

Done!

Why didn’t I come up with this before? I think it didn’t have the presence of mind because my mind had just been blown by the possibility of adding global aesthetics outside of the ggplot() statement. I was very excited about that discovery! Also, ggplot2 has also had an update since the original implmentation. Perhaps the behavior was different in a previous version. Don’t know. Not gonna check at this point. I guess probably it wasn’t.

Avatar
Evangeline Reynolds
Visiting Teaching Assistant Professor

My research interests include international institutions, causal inference, data visualization, and computational social science and pedagogy.