2

Despite my best efforts, I cannot get any content loaded side by side in Powerpoint slides generated using the R package officer. What I would like is content (sourced images or plots, etc. on the right and text on the left). Here is my workflow:

plot.gg <- ggplot(iris, aes(Sepal.Length, Petal.Width)) + 
   geom_line()

library(officer)
read_pptx()  %>%
  add_slide(layout = "Two Content", master = "Office Theme") %>%
  ph_with("text",  location = ph_location_type(type = "body", index = 4)) %>%
  ph_with(plot.gg, location = ph_location_type(type = "body", index = 3)) %>%
  print(target = "test.pptx") 

The result of the above code is that both pieces of content appear on the right flank. I can get text on the left side in the form of a title w/ ph_with_text(type = "title", index=1, str = "title") but despite my best efforts no captions or content appears on the left hand side of the slide.

Cyrus Mohammadian
  • 4,982
  • 6
  • 33
  • 62

2 Answers2

4

There are two solutions:

library(officer)
library(magrittr)
library(ggplot2)
plot.gg <- ggplot(iris, aes(Sepal.Length, Petal.Width)) + 
  geom_line()

# solution 1 : you don't have layout named "Two Content" ---
read_pptx()  %>%
  add_slide(layout = "Two Content", master = "Office Theme") %>%
  ph_with("text",  location = ph_location_type(type = "body", position_right = FALSE)) %>%
  ph_with(plot.gg, location = ph_location_type(type = "body")) %>%
  print(target = "test.pptx") 

# solution 1 : you can rely on a layout named "Two Content" ---
read_pptx()  %>%
  add_slide(layout = "Two Content", master = "Office Theme") %>%
  ph_with("text",  location = ph_location_left()) %>%
  ph_with(plot.gg, location = ph_location_right()) %>%
  print(target = "test.pptx") 

The parameter index is not part of the function and is ignored. I think you want to use id but its values should be 1 and 2 - documentation of this parameter is "index of the placeholder. If two body placeholder, there can be two different index: 1 and 2 for the first and second body placeholders defined in the layout. If this argument is used, position_right and position_top will be ignored."

David Gohel
  • 9,180
  • 2
  • 16
  • 34
2

You can explicitly specify that your first call to ph_with doesn't appear on the right.

read_pptx()  %>%
  add_slide(layout = "Two Content", master = "Office Theme") %>%
  ph_with("text",  location = ph_location_type(type = "body", index = 4, position_right = F)) %>%
  ph_with(plot.gg, location = ph_location_type(type = "body", index = 3)) %>%
  print(target = "test.pptx") 
caldwellst
  • 5,719
  • 6
  • 22
  • The parameter `index` is not part of the function and is ignored. I think you want to use `id` but its values should be 1 and 2 - documentation of this parameter is "index of the placeholder. If two body placeholder, there can be two different index: 1 and 2 for the first and second body placeholders defined in the layout. If this argument is used, position_right and position_top will be ignored." – David Gohel Mar 06 '20 at 07:52