Introduction
This is the fifth post in the series Elegant Data Visualization with ggplot2. In the previous post, we learnt about aesthetics. In this post, we will learn to:
- add title and subtitle to the plot
- modify axis labels
- modify axis range
- remove axis
- format axis
Basic Plot
Let us start with a simple scatter plot. We will continue to use the mtcars
data set and examine the relationship between displacement and miles per gallon
using geom_point()
.
ggplot(mtcars) +
geom_point(aes(disp, mpg))
Title & Subtitle
There are two ways to add title to a plot:
ggtitle()
labs()
ggtitle()
Let us explore the ggtitle()
function first. It takes two arguments:
- label: title of the plot
- subtitle: subtitle of the plot
Title & Subtitle
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
ggtitle(label = 'Displacement vs Mileage', subtitle = 'disp vs mpg')
Axis Labels
You can add labels to the axis using:
xlab()
ylab()
labs()
Axis Labels
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
xlab('Displacement') + ylab('Miles Per Gallon')
Labs
The labs()
function can be used to add the following to a plot:
- title
- subtitle
- X axis label
- Y axis label
Labs
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
labs(title = 'Displacement vs Mileage', subtitle = 'disp vs mpg',
x = 'Displacement', y = 'Miles Per Gallon')
Axis Range
In certain scenarios, you may want to modify the range of the axis. In ggplot2, we can achieve this using:
xlim()
ylim()
expand_limits()
Axis Range
xlim()
andylim()
take a numeric vector of length 2 as inputexpand_limits()
takes two numeric vectors (each of length 2), one for each axis- in all of the above functions, the first element represents the lower limit and the second element represents the upper limit
X Axis
In the below example, we limit the range of the X axis between 0
and 600
using xlim
.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
xlim(c(0, 600))
Y Axis
Let us limit the range of the Y axis between 0
and 40
.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
ylim(c(0, 40))
Expand Limits
Let us use expand_limits()
to limit the range of both the X and Y axis. The
first input is the range for the X axis and the second input for the Y axis. In
both the cases, we use a numeric vector of length 2 to specify the lower and
upper limit.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
expand_limits(x = c(0, 600), y = c(0, 40))
Remove Axis Labels
If you want to remove the axis labels all together, use the theme()
function.
It allows us to modify every aspect of the theme of the plot. Within theme()
,
set the following to element_blank()
.
axis.title.x
axis.title.y
Remove Axis Labels using theme()
element_blank()
will remove the title of the X and Y axis.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) +
theme(axis.title.x = element_blank(), axis.title.y = element_blank())
Format Title & Axis Labels
To format the title or the axis labels, we have to modify the theme of the plot
using the theme()
function. We can modify:
- color
- font family
- font face
- font size
- horizontal alignment
- and angle
In addition to theme()
, we will also use element_text()
. It should be used
whenever you want to modify the appearance of any text element of your plot.
Color
In the below example, we use the color
argument within element_text()
to
modify the color of the title of the plot to 'blue'
.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ggtitle('Diaplacement vs Mileage') +
theme(plot.title = element_text(color = 'blue'))
Font Family
Let us change the font family of the plot title to 'Arial'
by using the
family
argument.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ggtitle('Diaplacement vs Mileage') +
theme(plot.title = element_text(family = 'Arial'))
Font Face
The font face can be any of the following:
plain
bold
italic
bold.italic
Font Face
The face
argument can be used to modify the font face of the title of the
plot.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ggtitle('Diaplacement vs Mileage') +
theme(plot.title = element_text(face = 'bold'))
Font Size
The size of the title of the plot can be modified using the size
argument.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ggtitle('Diaplacement vs Mileage') +
theme(plot.title = element_text(size = 8))
Horizontal Alignment
To modify the horizontal alignment of the title, use the hjust
argument. It
can take values between 0
and 1
. If the value is closer to 0
, the text
will be left-aligned and viceversa.
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ggtitle('Diaplacement vs Mileage') +
theme(plot.title = element_text(hjust = 0.3))
Putting it all together…
Title
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ggtitle('Diaplacement vs Mileage') +
theme(plot.title = element_text(color = 'blue', family = 'Arial',
face = 'bold', size = 12, hjust = 0.5))
X axis label
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + xlab('Diaplacement') +
theme(axis.title.x = element_text(color = 'blue', family = 'Arial',
face = 'bold', size = 8, hjust = 0.5, angle = 15))
Y axis label
ggplot(mtcars) +
geom_point(aes(disp, mpg)) + ylab('Miles Per Gallon') +
theme(axis.title.y = element_text(color = 'blue', family = 'Arial',
face = 'italic', size = 8, vjust = 0.3, angle = 90))
Summary
In this post, we learnt to:
- add title and subtitle to the plot
- modify axis labels
- modify axis range
- remove axis
- format axis
Up Next..
In the next post, we will learn to add text annotations to plots.