Skip to content
R for the Rest of Us Logo

R in 3 Months (Fall 2025)

Facets

Transcript

Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

View code shown in video
# Load Packages -----------------------------------------------------------

library(tidyverse)

# Import Data -------------------------------------------------------------

penguins <- read_csv("penguins.csv")

# Facets ------------------------------------------------------------------

# One of the most powerful features of ggplot is facetting. 
# You can make small multiples by adding just a line of code.

# The facet_wrap() function will create small multiples.

ggplot(data = penguin_bill_length_by_island_and_sex,
       mapping = aes(x = island,
                     y = mean_bill_length,
                     fill = sex)) +
  geom_col(position = "dodge") +
  labs(title = "Males have longer bills than females",
       subtitle = "But they're all good penguins",
       caption = "Data from the palmerpenguins R package",
       x = NULL,
       y = "Mean Bill Length in Millimeters",
       fill = NULL) +
  theme_economist() +
  facet_wrap(vars(sex))

# You can do something similar with the facet_grid() function.
# With this function, you can specify whether you want the facetting 
# on rows or columns.

# This is identical to the facet_wrap() above.

ggplot(data = penguin_bill_length_by_island_and_sex,
       mapping = aes(x = island,
                     y = mean_bill_length,
                     fill = sex)) +
  geom_col(position = "dodge") +
  labs(title = "Males have longer bills than females",
       subtitle = "But they're all good penguins",
       caption = "Data from the palmerpenguins R package",
       x = NULL,
       y = "Mean Bill Length in Millimeters",
       fill = NULL) +
  theme_economist() +
  facet_grid(cols = vars(sex))

# This puts the result in two rows.

ggplot(data = penguin_bill_length_by_island_and_sex,
       mapping = aes(x = island,
                     y = mean_bill_length,
                     fill = sex)) +
  geom_col(position = "dodge") +
  labs(title = "Males have longer bills than females",
       subtitle = "But they're all good penguins",
       caption = "Data from the palmerpenguins R package",
       x = NULL,
       y = "Mean Bill Length in Millimeters",
       fill = NULL) +
  theme_economist() +
  facet_grid(rows = vars(sex))

# We can use facetting for any type of figure. 
# Here's our scatterplot from before with a theme and 
# facetting by sex added 

ggplot(data = penguins,
       mapping = aes(x = bill_length_mm,
                     y = bill_depth_mm)) +
  geom_point() +
  theme_economist() +
  facet_grid(cols = vars(sex))

# You can even use multiple variables with facet_grid().

ggplot(data = penguins,
       mapping = aes(x = bill_length_mm,
                     y = bill_depth_mm)) +
  geom_point() +
  theme_economist() +
  facet_grid(rows = vars(year),
             cols = vars(sex))

Your Turn

# Load Packages -----------------------------------------------------------

library(tidyverse)

# Import Data -------------------------------------------------------------

penguins <- read_csv("penguins.csv")

# Facets ------------------------------------------------------------------

# I've written code to give you a data frame to work with
# Run the code and take a look at the penguin_weight_by_species_and_sex data frame

penguin_weight_by_species_and_sex <- penguins |> 
  drop_na(sex) |> 
  group_by(species, sex) |> 
  summarize(mean_weight = mean(body_mass_g))

# Now see if you can recreate the plot below
# You'll need to adjust the theme, add plot labels, and use facetting.

# YOUR CODE HERE

Learn More

Chapter 11 of the R Graphics Cookbook covers facets. Kieran Healy discusses them in Chapter 4 of Data Visualization: A Practical Introduction, as does Claus Wilke in Chapter 21 of Fundamentals of Data Visualization.

I’ve also written an article about the value of small multiples. It includes some code for making them.

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Course Content

128 Lessons