将ggplot图表保存为PDF格式无法正确格式化

时间:2018-03-07 22:08:51

标签: r ggplot2

这是我原来here

的后续问题

我目前正在尝试将ggplot图的输出保存为.pdf,但我遇到了一些问题。

我在原始问题的dput数据上运行以下内容(我在下面重新编写所有内容)。

library(gridExtra)
pdf("Plots.pdf", onefile = TRUE)
for(j in 1:length(plotList)) {
grid.arrange(plotList[[j]], nrow = 2)
}
dev.off()

这会将文件保存为pdf文档,但不是每页获取两个图形,而是获得一个占用半页的图形。是否可以调整图表的大小,当我选择nrow = 3我遇到同样的问题时,我会在页面的前三/半页面中找到一个图表,剩下的就是一个空白区域。我提供了输出的屏幕截图:

enter image description here

这是一个最小的例子:

# Make empty list for plots
plotList <- list()

# Build plots
library(ggplot2)
for(i in 1:2){

  plotList[[i]] <-   
    ggplot(mtcars, aes(mpg, cyl)) +
        geom_point() +
        labs(title = i)
}

# Save plots
library(gridExtra)
pdf("Plots.pdf", onefile = TRUE)
for(j in 1:length(plotList)) {
  grid.arrange(plotList[[j]], nrow = 2)
}
dev.off()

归功于@LachlanO

1 个答案:

答案 0 :(得分:1)

你的问题来自于你如何打电话grid.arrange。通过将其包含在循环中,您可以告诉它创建多个单独的图,如下所示:

grid.arrange(plotList[[1]], nrow = 2)
grid.arrange(plotList[[2]], nrow = 2)
grid.arrange(plotList[[3]], nrow = 2)

您实际要做的是创建一个包含所有绘图的grid.arrange对象。为此,您需要针对列表调用该函数:

do.call("grid.arrange", c(plotList, nrow=2))

或者,您可以使用cowplot包并使用:

cowplot::plot_grid(plotlist = plotList, nrow = 2)

所以要保存PDF,你可以使用:

pdf("Plots.pdf", onefile = TRUE)
do.call("grid.arrange", c(plotList, nrow=2))
dev.off()