I have the following dataframe:
uniq <- structure(list(year = c(1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L,
As of ggplot2 version 3, there is an expand_scale()
function that you can pass to the expand=
argument that lets you specify different expand values for each side of the scale.
As of ggplot2 version 3.3.0, expand_scale()
has been deprecated in favor of expansion
which otherwise functions identically.
It also lets you choose whether you want to the expansion to be an absolute size (use the add=
parameter) or a percentage of the size of the plot (use the mult=
parameter):
ggplot(data = uniq) +
geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
scale_y_continuous(limits = c(0,101), expand = expansion(mult = c(0, .1))) +
theme_bw()
Since this is my top-voted answer, I thought I'd expand this to better illustrate the difference between add=
and mult=
. Both options expand the plot area a specific amount outside the data. Using add
, expands the area by a absolute amount (in the units used for that axis) while mult
expands the area by a specified proportion of the total size of that axis.
In the below example, I expand the bottom using add=10
, which extends the plot area by 10 units down to -10. I exapand the top using mult=.15
which extends to top of the plot area by 15% of the total size of the data on the y-axis. Since the data goes from 0-100, that is 0.15 * 100 = 15 units – so it extends up to 115.
ggplot(data = uniq) +
geom_area(aes(x = year, y = uniq.p, fill = uniq.loc),
stat = "identity", position = "stack") +
scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
scale_y_continuous(limits = c(0,101),
breaks = seq(-10, 115, by=15),
expand = expansion(mult = c(0, .15),
add = c(10, 0))) +
theme_bw()