这是我原来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
我遇到同样的问题时,我会在页面的前三/半页面中找到一个图表,剩下的就是一个空白区域。我提供了输出的屏幕截图:
这是一个最小的例子:
# 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
答案 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()