Module lessons (2/2)
Customization and Facets
Beyond defining geometries and aesthetics, ggplot2 allows you to completely customize the visual look of a plot by adding titles, modifying themes, and faceting (splitting plots into sub-panels).
Titles and Labels: labs()
To add a main title, subtitles, and customize axis labels or legend titles, we add the labs() layer:
ggplot(df, aes(x = age, y = income)) +
geom_point() +
labs(
title = "Income by Age",
subtitle = "2026 census data",
x = "Age (years)",
y = "Annual Income (EUR)",
color = "Gender"
)
Visual Themes: theme_*()
ggplot2 includes several pre-packaged themes that change backgrounds, grid lines, and typography. Some of the most common ones are:
theme_gray()(the default theme with a light gray background).theme_minimal()(a clean white background with thin grid lines).theme_classic()(a simple classic style, with no background grid lines).
ggplot(df, aes(x = age, y = income)) +
geom_point() +
theme_minimal() # Applies a clean, modern style
Splitting Plots into Sub-panels: facet_wrap()
Faceting allows you to split a single plot into multiple subplots (panels) side-by-side based on the value of a categorical variable.
The primary function is facet_wrap() and uses R formula notation (~ variable_name):
# Creates a separate subplot for each department
ggplot(df, aes(x = age, y = income)) +
geom_point() +
facet_wrap(~ department)
Try it yourself
Exercise 1: Add titles and axes
Given the scatter plot, add a labs() layer setting the title (title) to 'Title', the x-axis label to 'Age', and the y-axis label to 'Income'.
Show hint
Usa labs(title = 'Title', x = 'Age', y = 'Income') concatenandolo con il '+'.
Solution available after 3 attempts
Exercise 2: Apply a clean theme
Apply the theme_minimal() graphic theme to the scatter plot below to improve its visual aesthetics.
Show hint
Usa il segno '+' e aggiungi la funzione theme_minimal().
Solution available after 3 attempts
Exercise 3: Split the plot with facet_wrap
Use the facet_wrap() function to split the scatter plot into different panels based on the department column.
Show hint
Usa facet_wrap(~ department) per suddividere il grafico.
Solution available after 3 attempts
Exercise 4: Flip coordinate axes
To make a column chart with many categories readable, you can flip the x and y axes. Add the coord_flip() layer to the bar chart.
Show hint
Usa coord_flip() legandolo alla pipeline ggplot con '+'.
Solution available after 3 attempts
Exercise 5: Complete publication-ready plot
Create a complete plot on df: map age to x, income to y, and color to gender inside geom_point(). Split the plot using facet_wrap() by department, add labs() with title 'Salary by Age', and finally apply theme_minimal().
Show hint
Unisci tutti gli strati usando '+': ggplot(...) + geom_point() + facet_wrap(~ department) + labs(title = 'Salary by Age') + theme_minimal()
Solution available after 3 attempts