Let’s go through how to make a basic presentation using r2pptx
!
r2pptx
leverages the power of the officer
package and the ease of use of PowerPoint templates to form a simple and easy to use API to create PowerPoint slide decks straight from R. Therefore, the first thing we need to do is to choose a PowerPoint template. This is a normal .pptx
file that has the template we want in Slide Master
. By default, r2pptx
uses the default template in officer
, which seems like a slight variation on the default Microsoft PowerPoint template.
Let’s start by creating a presentation
.
presentation <- new_presentation()
print(presentation)
#> Presentation with 0 slides.
print(template_path(presentation))
#> [1] "/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/officer/template/template.pptx"
We can see this is an empty presentation with the template path set to the default officer
template. What’s in this template? We can check easily using some utility functions.
get_layouts(presentation)
#> layout master
#> 1 Title Slide Office Theme
#> 2 Title and Content Office Theme
#> 3 Section Header Office Theme
#> 4 Two Content Office Theme
#> 5 Comparison Office Theme
#> 6 Title Only Office Theme
#> 7 Blank Office Theme
This template has seven different layouts. That’s good to know, but it doesn’t help us entirely figure out which layout to use for which purpose. Let’s keep going!
layouts <- get_layouts(presentation)$layout
for (layout in layouts) {
plot_layout(presentation, layout)
title(main = layout)
}
Now we can see for each slide layout what options we have to use as placeholders! Knowing this, we can move forward and start constructing our presentation!
In r2pptx
syntax, presentations
are made up of slides
which are made up of elements
. elements
represent anything we want to add to the deck – text, plots, images, tables, etc. Anything compatible with the officer
package works here!
We start out making a title slide with a title and subtitle. We give elements
for the title and subtitle as arguments to the new_slide()
function. And we give “Title Slide” as the layout name, per the information from above.
title_slide <- new_slide(
layout = "Title Slide",
elements = list(
new_element(key = "Title 1", value = "The title"),
new_element(key = "Subtitle 2", value = "The subtitle")
)
)
print(title_slide)
#> Slide with layout `Title Slide` and 2 elements:
#> - character
#> - character
elements
have two arguments. The key
tells R where to place the element. Currently, this only supports a placeholder label. Placeholder lables are the name of placeholders, which are the objects in a PowerPoint slide layout (as seen above). Future development may allow other location specifications, such as giving x and y positions.
Now we add the title slide to our presentation.
presentation <- presentation + title_slide
print(presentation)
#> Presentation with 1 slides.
Easy!
Let’s add another slide with a ggplot. This time, we’ll add the elements
to the slide
rather than initializing the slide
with elements
.
# create the slide object
plot_slide <- new_slide(layout = "Title and Content")
print(plot_slide)
#> Slide with layout `Title and Content` and 0 elements:
#> -
# create an element for the title element
title_element <- new_element(key = "Title 1", value = "A plot")
# create a ggplot
cars_plot <- ggplot(mtcars, aes(x = mpg, y = cyl)) +
geom_point()
# create an element for the plot
plot_element <- new_element(key = "Content Placeholder 2", value = cars_plot)
plot_slide <- plot_slide +
title_element +
plot_element
print(plot_slide)
#> Slide with layout `Title and Content` and 2 elements:
#> - character
#> - gg
presentation <- presentation +
plot_slide
print(presentation)
#> Presentation with 2 slides.
And then we can write the presentation
to PowerPoint.
ppt_path <- tempfile(fileext = ".pptx")
write_pptx(presentation, ppt_path)
if (interactive()) system(paste("open", ppt_path))
And you have a slide deck! Congrats!