11

我正在使用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 文件:
在此处输入图像描述

将输出放在一个6 页的单个 pdf中的最简单方法是什么?

我知道这可以通过reportsandpdftools包来完成,但我想知道是否有更直接的方法来实现这一点。我希望 ggforce 能够为输出提供单页功能,但看起来情况并非如此?

4

2 回答 2

23

您甚至不需要使用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()
于 2018-01-31T14:14:53.520 回答
8

我面临着类似的问题,这是我的解决方案,基本上是 Mike H. 答案的扩展。

通常,您想要绘制所有页面并且事先不知道您有多少页,而且您可能希望在标准 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(...)两次或将其包装到一个专用函数中。我想听听更好的解决方案...

于 2019-10-14T09:29:08.023 回答