Как сохранить вывод из ggforce::facet_grid_paginate только в одном файле PDF?

Я использую пакет ggforce для создания многогранных графиков на нескольких страницах:

library(ggforce) 

for(i in 1:6){
  ggplot(diamonds) +
    geom_point(aes(carat, price), alpha = 0.1) +
    facet_wrap_paginate(~cut:clarity, ncol = 2, nrow = 2, page = i)

  ggsave(paste0("~/diamonds_", i, ".pdf"))
}

который генерирует ожидаемые 6 файлов PDF:
введите описание изображения здесь

Какой самый простой способ получить вывод в одном PDF-файле с 6 страницами?

Я понимаю, что это можно сделать с reports а также pdftools пакеты, но мне интересно, есть ли более прямой способ сделать это. Я ожидаю, что ggforce предоставит функциональность для вывода на одной странице, но похоже, что это не так?

1 ответ

Решение

Вам даже не нужно использовать ggsave Вы можете поместить все эти участки в один pdf от:

pdf("~/diamonds_all.pdf")
for(i in 1:6){
  print(ggplot(diamonds) +
          geom_point(aes(carat, price), alpha = 0.1) +
          facet_wrap_paginate(~cut:clarity, ncol = 2, nrow = 2, page = i))

}
dev.off()

У меня аналогичный вопрос, и вот мое решение, в основном расширение ответа Майка Х.

Обычно вы хотите распечатать все страницы и заранее не знаете, сколько страниц у вас есть. Кроме того, вы можете распечатать на бумаге стандартного размера A4. Так:

library(ggforce) 

gg <- ggplot(diamonds) + 
    geom_point(aes(carat, price)) +
    facet_wrap_paginate(~cut:clarity, ncol = 2, nrow = 2, page = 1)
n <- n_pages(gg)

pdf('diamonds.pdf', paper= 'A4', w= 210/25.4, 297/25.4)
for(i in 1:n){
    print(gg + facet_wrap_paginate(~cut:clarity, ncol = 2, nrow = 2, page = i))
}
dev.off()

Код должен быть понятным. Уродство в том, что тебе приходится повторятьfacet_wrap_paginate(...)дважды или превратите его в специальную функцию. Я хотел бы услышать лучшее решение...

Другие вопросы по тегам