Построение графика ggplot2 на слайде Power Point заданного размера — R

Я пытаюсь построить график ggplot2 на слайде Power Point с пакетом officer. На самом деле я могу это сделать (печатать ggplot2 прямо в ppt), но так как мне нужно увеличить размер графика ggplot2 (для слайда ppt), и я понял, что графики ggplot2 зависят от размера окна ( в RStudio) или что бы вы ни установили, как будто вы его экспортируете, я ищу способ (1) экспортировать график ggplot2 с заданным размером (например: height=5, width=8), (2) импорт/чтение из ppt код:

library(officer)
library(devEMF)
library(magrittr)
library(ggplot2)

t <- "../example.pptx"
filename <- gg

read_pptx() %>% 
  add_slide(layout = "Title and Content", master = "Office Theme") %>% 
  ph_with_img(src = filename, width = 6, height = 4, type = "body") %>% 
  print(target = t)

gg — это любой сюжет из ggplot2 (на самом деле это не имеет значения). t — адрес выходного файла.

ph_with_img

документы и рисунки PowerPoint

PD: Все это не нужно, если есть какой-то пакет/команда, которую я не знаю и до сих пор не могу найти, где я могу отредактировать размер ggplot2.


person Chris    schedule 17.01.2019    source источник
comment
решение (1): используйте, например. png() с width = 8, height = 5   -  person erc    schedule 17.01.2019
comment
Посмотрите мой ответ, используя команду graph2ppt из пакета экспорта, которая позволяет указать ширину и высоту...   -  person Tom Wenseleers    schedule 26.03.2019
comment
Нет необходимости сохранять объект ggplot извне или использовать внешние пакеты, см. мой ответ ниже.   -  person JWilliman    schedule 12.06.2020


Ответы (3)


Мне удалось сначала сохранить график ggplot2 в формате .png, а затем вызвать этот файл в ph_with_img. Немного круговой, но это работает. Вы также можете сохранить график как ?tempfile, а затем ?unlink, но мне нравится иметь папку с моими графиками.

ggplot() +
  (code for my ggplot)

ggsave("../thisplot.png", width = 6, height = 4)

read_pptx() %>% 
  add_slide(layout = "Title and Content", master = "Office Theme") %>% 
  ph_with_img(src = "../thisplot.png", width = 6, height = 4, type = "body") %>% 
  print(target = t)
person Adam    schedule 17.01.2019
comment
Недостатком этого решения является то, что вывод представляет собой растровое изображение, а не векторную графику... Я разместил альтернативный ответ ниже, который сохраняет векторный формат... - person Tom Wenseleers; 26.03.2019

Я только что сделал новый пакет export, построенный поверх officer, который легко позволяет сделать это с помощью команды graph2ppt() и который прекрасно экспортирует в векторный формат, а не в растровый в другом ответе, опубликованном выше, например.

install.packages("export")
library(export)
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, 
      size = Petal.Width, alpha = I(0.7))     
graph2ppt(file="plots.pptx", width=6, height=5) 
person Tom Wenseleers    schedule 26.03.2019
comment
Можно ли этот подход сочетать со стандартным офицерским языком = например. doc <- read_pptx(); doc <- ph_with(x = doc, value = my_ggplot, location = ph_location_fullsize() ) - или это полная оболочка, которая отображает только одну графику в виде страницы pptx? - person geotheory; 15.06.2020
comment
Это всего лишь оболочка, внутри которой используется Officer, поэтому моей единственной целью было иметь возможность легко экспортировать один график, хотя он также позволяет добавлять дополнительные графики в существующий файл. - person Tom Wenseleers; 16.06.2020

Ниже показано, как создать и экспортировать объект ggplot в виде векторной графики непосредственно в PowerPoint с помощью officer 0.3.11. Ключ в том, чтобы использовать ph_with с location = ph_location. Это позволяет вам установить положение и размер объекта.


library(ggplot2)
library(dplyr, warn.conflicts = FALSE)
library(officer)
library(rvg)

t <- "example.pptx"

fig_gg <- ggplot(mtcars, aes(x=wt, y=mpg)) +
  geom_point()

fig_vg <- dml(ggobj = fig_gg)

read_pptx() %>% 
  add_slide(layout = "Title Only", master = "Office Theme") %>% 
  ph_with(fig_vg, location = ph_location(left = .5, top = 1.3, height = 5, width = 5)) %>% 
  print(t)

Создана 12 июня 2020 г. в пакете reprex (v0.3.0)

person JWilliman    schedule 11.06.2020
comment
Если я не ошибаюсь, это не меняет размер (разрешение) графика, а скорее спецификацию его ограничивающей рамки на странице. Это не дает никакого контроля над тем, как большой текст и поля отображаются. - person geotheory; 15.06.2020
comment
@geotheory В моем примере изменение спецификаций для width и height действительно меняет размер фигуры в PowerPoint. Векторные изображения не имеют разрешения как такового (по сравнению с растровыми/растровыми изображениями). Размер текста и полей контролируется из вызова ggplot, например. fig_gg + theme(text = element_text(size=20)). - person JWilliman; 16.06.2020
comment
Очень сложно получить все это прямо внутри ggplot. Вам нужен метод для изменения масштаба окончательного сюжета. - person geotheory; 16.06.2020
comment
@geotheory Думаю, это вопрос мнения. Установка параметров внутри вызова ggplot гарантирует, что фигура будет согласованной независимо от вывода (латекс, html или pptx). Я предпочитаю использовать векторную графику в формате pptx, так как она поддерживает изображение с максимально возможным «разрешением», соответствует требованиям журнала, позволяет коллегам просматривать изображение без специального графического программного обеспечения, а окончательный график можно редактировать в PowerPoint, если вы все еще хотите настроить размеры шрифта и т.д. - person JWilliman; 17.06.2020
comment
Конечно вектор предпочтительнее. Причина моего мнения заключается в том, что внутри ggplot вы можете либо установить для всех текстовых элементов одинаковый размер (редко желательно), либо индивидуально написать аргументы theme для каждого элемента. Затем повторите для различных типов полей/полос/и т. д. Или вы можете просто указать настроить w={x}, h={y} в ggsave, и все готово. К сожалению, что-то близкое к последнему подходу здесь недоступно. - person geotheory; 17.06.2020
comment
Извиняюсь, я не хочу показаться критичным. Я просто ненавижу возиться с темой! - person geotheory; 17.06.2020
comment
Достаточно справедливо :) Вы можете настроить относительный размер всего текста, используя аргумент theme(base_size = 20). См. community.rstudio.com/t/ggplot-theme. -with-larger-font-sizes/ для получения дополнительной информации. - person JWilliman; 17.06.2020
comment
Я этого не знал! Спасибо - person geotheory; 17.06.2020