ggreveal
is an R package that makes it easy to present
data on ggplot2 graphs incrementally. The functions in this package take
a plot and break it down into a series of intermediary plots that can be
shown in sequence (e.g. in different slides). Like this:
Why would you want to do that? Because it’s fun — and often very useful for teaching and giving talks.
install.packages("ggreveal")
Create a graph with ggplot2 as usual.
library(palmerpenguins)
library(ggplot2)
library(ggreveal)
<- ggplot(penguins[!is.na(penguins$sex),],
p aes(body_mass_g, bill_length_mm,
group=sex, color=sex)) +
geom_point() +
geom_smooth(method="lm", formula = 'y ~ x', linewidth=1) +
facet_wrap(~species) +
theme_minimal()
p
Then use one of the reveal_*
functions
(e.g. reveal_groups()
, reveal_layers()
,
reveal_aes()
) to obtain a list of plots that show elements
incrementally.
<- reveal_groups(p)
plot_list
plot_list#> [[1]]
#>
#> [[2]]
#>
#> [[3]]
You probably want to save these plots to include them later in a
presentation. Use reveal_save()
:
reveal_save(plot_list, "myplot.png", width = 8, height = 4)
── Saving incremental plots ──
✔ myplot_0.png
✔ myplot_1.png
✔ myplot_2_last.png
Yes and no. ggplot2
is composable by design, so it is
straightforward to do some incremental reveal out of the box. For
example, you can create the plot in steps and save the steps
separately:
data("mtcars")
<- ggplot(mtcars,
p1 aes(mpg, wt)) +
geom_point()
<- p1 + geom_smooth(method="lm", formula="y~x") p2
The problem is that, as you add layers and other elements, several
visual aspects of the plot — e.g. range of axes, legends — can, and will
often, change. Showing how the layout changes as you add elements is
useful for teaching how to make graphs in ggplot2, but it is
distracting when you want to focus on the results. Keeping the
layout fixed is sometimes easy (e.g. setting the limits
argument for the x/y scale), but in many cases it requires tinkering
with the internals of the ggplot object.