Лучший способ экспортировать графики ggplot2 в документ Word?

#r #ggplot2

#r #ggplot2

Вопрос:

Я создал несколько потрясающих графиков, которые хочу экспортировать в свой документ Word. Да, следовало бы написать в Markdown, но… ты знаешь… когда-нибудь!

Однако как мне изменить размеры графиков до нужных размеров, в то время как метки остаются «в пределах» периметра? Смотрите следующие примеры (код приведен в конце документа).

Я хочу вставить следующий график в свой документ Word:

Тестовое изображение

Выглядит великолепно! Не тогда, когда я вставляю его в документ:

Скриншот Word

Надписи две крошечные, и я бы с удовольствием растянул их вертикально, чтобы ширина была больше высоты. Итак, мне удалось создать это:

введите описание изображения здесь

И это потому, что я застрял. Как мне сохранить метки в пределах периметра? И есть ли лучший способ «подогнать» документ Word, чем угадать правильные размеры?

Спасибо!

Это и есть код:

 library(ggplot2)

df <- mpg # Load sample data

# First test graph 
ggplot(data = df, mapping = aes(cyl, hwy))  
  geom_smooth()  
  geom_point()  
  geom_point()  
  labs(y = "This is just one very long label to prove a point ..... 1234",
       x = "Cyl")  
  theme_classic()  
  theme(legend.title = element_blank())

ggsave("test1.png")

# Modified test graph to add fit the Word document

ggplot(data = df, mapping = aes(cyl, hwy))  
  geom_smooth()  
  geom_point()  
  geom_point()  
  labs(y = "This is just one very long label to prove a point ..... 1234",
       x = "Cyl")  
  theme_classic(base_size = 12)   # SIZE CHANGED
  theme(legend.title = element_blank())

ggsave("test2.png", width = 8, height = 4) # DIMENSIONS DEFINED
 

Комментарии:

1. Привет, ты видел офицерскую посылку?..

Ответ №1:

Решение, которое я обычно использую, включает officer пакет, упомянутый выше. Раньше это позволяло экспортировать графики в виде векторных объектов в docx, чтобы вы могли изменять размеры и текст на графике, когда он находится в документе. Похоже, что это было приостановлено в последних версиях, но все еще работает для PowerPoint. Следующий код помещает график в виде сгруппированной фигуры на слайд PowerPoint, где его можно настроить перед копированием в word:

 library(ggplot2)
library(officer)
library(tidyverse)

df <- mpg # Load sample data

# First test graph 
plot2 <- ggplot(data = df, mapping = aes(cyl, hwy))  
  geom_smooth()  
  geom_point()  
  geom_point()  
  labs(y = "This is just one very long label to prove a point ..... 1234",
       x = "Cyl")  
  theme_classic(base_size = 12)   # SIZE CHANGED
  theme(legend.title = element_blank())

pptx <- read_pptx()

pptx %>% 
  add_slide() %>% 
  # This first line puts it in as a static png image for comparison
  ph_with(plot2, location = ph_location_type(type = "body")) %>% 
  add_slide() %>% 
  # This line puts in a shape object, which can be ungrouped and edited
  ph_with(rvg::dml(ggobj = plot2),
          width = 8,
          height = 4, 
          location = ph_location_type(type = "body"))

#> pptx document with 2 slide(s)

print(pptx, "test_graph.pptx")
 

Создано 2020-12-08 пакетом reprex (версия 0.3.0)

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


Редактировать: Смотрите Этот выпуск на GitHub для объяснения того, почему перенос векторной графики в docx больше не возможен officer .