Editable Plots from R to PowerPoint

February 24, 2018
By

(This article was first published on Laurens Geffert, and kindly contributed to R-bloggers)

In this post I am giving a quick overview of how to create editable plots
in PowerPoint from R. These plots are comprised of simple vector-based shapes
and thus allow you to change labels, colours, or text position in seconds.
Your project managers will love it!

Motivation

R allows us to create great visualisations, but in most data science settings
these need to be presented to key stakeholders and decision makers in
presentations or “slideuments”. Having to make small changes to previously
compiled slots can be time consuming and frustrating. A solution to this common
problem is to keep your plots and graphs editable as a group of vector shapes
in PowerPoint. This way project managers or data scientists themselves can make
small changes without having to re-execute a single line of code.

Solution

We will use a tidyverse approach for creating the plot. Furthermore, the
officer package enables us to smoothly interact with PowerPoint, and the rvg
package is required to save our plots as editable vector graphs.

library(tidyverse)
library(officer)
library(rvg)

For demonstration purposes, let’s create a plot using the diamonds dataset.
NB: I am saving the ggplot object to a variable name, but also displaying the
plot when executing the lines by appending the ; ggp at the end.

# Using diamonds dataset which is shipped with R
ggp <- diamonds %>%
  # Let's simplify things by only considering natural number carats
  mutate(carat = floor(carat)) %>%
  group_by(carat, cut, clarity, color) %>%
  summarise(price = mean(price)) %>%
  # Create a plot of price by carat, colour, cut, and clarity
  ggplot(aes(x = carat, y = price, fill = color)) +
  geom_bar(stat = 'identity') +
  facet_grid(cut ~ clarity) +
  # Simplify the plot layout a little
  theme_bw() +
  guides(fill = FALSE) +
  theme(panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank()); ggp

Plot example

Now we can use officer to create a new PowerPoint document and
rvg::ph_with_vg to drop our ggplot object in there.

# Create a new powerpoint document
doc <- read_pptx()
doc <- add_slide(doc, 'Title and Content', 'Office Theme')

# Add the plot
doc <- ph_with_vg(doc, ggobj = ggp, type = 'body')  

# Write the document to a file
print(doc, target = 'plot.pptx')

Now open the document in PowerPoint. Right-click and ungroup the plot. Voila!
You should be able to select individual elements, for example the data bars in
the plot, change their colour, move them around, change the text in labels,
and much more. Have a look at the plot below. A cookie for you if you can
find all ten edits that I made in the example.

Plot example

As always, hope this is helpful. And FYI, I am still looking for a way to
achieve the same result using Python. If you know one, collect some bounty
here

To leave a comment for the author, please follow the link and comment on their blog: Laurens Geffert.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.

Search R-bloggers

Sponsors

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)