Facets
This lesson is called Facets, part of the R in 3 Months (Spring 2025) course. This lesson is called Facets, part of the R in 3 Months (Spring 2025) course.
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!
Course Content
127 Lessons
1
Welcome to Getting Started with R
00:57
2
Install R
02:05
3
Install RStudio
02:14
4
Files in R
04:33
5
Projects
07:54
6
Packages
02:38
7
Import Data
05:24
8
Objects and Functions
03:16
9
Examine our Data
12:50
10
Import Our Data Again
07:11
11
Getting Help
07:46
12
Week 1 Live Session (Spring 2025)
1:03:11
1
Welcome to Fundamentals of R
01:36
2
Update Everything
02:45
3
Start a New Project
02:16
4
The Tidyverse
03:34
5
Pipes
04:15
6
select()
07:25
7
mutate()
04:25
8
filter()
10:05
9
summarize()
05:59
10
group_by() and summarize()
05:54
11
arrange()
02:07
12
Create a New Data Frame
03:58
13
Bring it All Together (Data Wrangling)
07:29
14
Week 2 Project Assignment
09:39
15
Week 2 Coworking Session (Spring 2025)
16
Week 2 Live Session (Spring 2025)
1:03:24
1
The Grammar of Graphics
04:39
2
Scatterplots
03:46
3
Histograms
05:47
4
Bar Charts
06:37
5
Setting color and fill Aesthetic Properties
02:39
6
Setting color and fill Scales
05:40
7
Setting x and y Scales
03:09
8
Adding Text to Plots
07:32
9
Plot Labels
03:57
10
Themes
02:19
11
Facets
03:12
12
Save Plots
02:57
13
Bring it All Together (Data Visualization)
06:42
14
Week 3 Project Assignment
03:30
15
Week 3 Coworking Session (Spring 2025)
16
Week 3 Live Session (Spring 2025)
1:02:31
1
Downloading and Importing Data
10:32
2
Overview of Tidy Data
05:50
3
Tidy Data Rule #1: Every Column is a Variable
07:43
4
Tidy Data Rule #3: Every Cell is a Single Value
10:04
5
Tidy Data Rule #2: Every Row is an Observation
04:42
6
Week 6 Coworking Session (Spring 2025)
7
Week 6 Live Session (Spring 2025)
1:02:38
1
Best Practices in Data Visualization
03:44
2
Tidy Data
02:25
3
Pipe Data into ggplot
09:54
4
Reorder Plots to Highlight Findings
03:37
5
Line Charts
04:17
6
Use Color to Highlight Findings
09:16
7
Declutter
08:29
8
Add Descriptive Labels to Your Plots
09:10
9
Use Titles to Highlight Findings
08:14
10
Use Annotations to Explain
07:09
11
Week 9 Coworking Session (Spring 2025)
12
Week 9 Live Session (Spring 2025)
59:09
1
Advanced Markdown
06:43
2
Tables
18:36
3
Advanced YAML and Code Chunk Options
05:53
4
Inline R Code
04:42
5
Making Your Reports Shine: Word Edition
04:30
6
Making Your Reports Shine: PDF Edition
06:11
7
Making Your Reports Shine: HTML Edition
06:06
8
Presentations
10:12
9
Dashboards
05:38
10
Websites
06:43
11
Publishing Your Work
04:38
12
Quarto Extensions
05:50
13
Parameterized Reporting, Part 1
10:57
14
Parameterized Reporting, Part 2
05:11
15
Parameterized Reporting, Part 3
07:47
16
Week 12 Coworking Session (Spring 2025)
17
Week 12 Live Session (Spring 2025)
57:01
You need to be signed-in to comment on this post. Login.
Pa Thao • October 3, 2023
For the 'Your Turn', I added code:
and realized that it was not an exact match to this plot (plus the solution gave that away)...were there clues in the plot that would have helped me determine that these codes lines were not necessary?
Libby Heeren Coach • October 4, 2023
Hey there! You know, there aren't exact clues to say that it wouldn't be necessary, but once you've used ggplot a bunch, you'll start to notice that it does a lot of things for us. Without us needing to designate limits and breaks, ggplot will make a reasonable guess about what they should be given the data values and data types. For example, in the solution code, ggplot sees that we are using a numeric data type for our y axis, so it already treats it like a continuous variable, and it can see the range of that variable, so it knows where to reasonably set the upper limit of the plot so that it includes the max value, plus a little bit of buffer.
I usually make sure my data types are correct for my plot, and then let ggplot do what it does with my data. If I like the choices it makes, I leave it! If it needs a little bit of help to do what I want, then I'll start specifying limits and breaks :)