7

我想在一个 pdf 文件中打印多个图表。我知道这有很多,但我想为每页打印不同的窗口/图形大小,即第一页 8.5x11,第二页 11x8.5 等等。我试过这个:

pdf(file="Combined_Graphs.pdf",onefile=TRUE,bg="white",width=8.5,height=11)
hist(rnorm(100))
pdf(file="Combined_Graphs.pdf",onefile=TRUE,width=11, height=8.5, bg="white")
hist(rnorm(100,10,2),col="blue")
dev.off()

我一定是用onefile=TRUE错了,因为它只在关闭前生成最后一个图形。有没有更好的方法来调整图形设备的大小而不必调用 pdf 函数两次?

4

2 回答 2

7

我要做的是生成单独的 PDF,然后将它们组合起来。我为此使用PDF 工具包。使用系统调用将其包装在 R 函数中,system甚至使其可从 R 编写脚本。对 pdftk 的调用将类似于:

pdftk *pdf cat output combined.pdf

或在 R 中:

system("pdftk *pdf cat output combined.pdf")  

combine_pdfs = function(path, output_pdf) {
  system(sprintf("pdftk %s/*pdf cat output %s"), path, output_pdf)
}
于 2012-09-26T17:56:20.610 回答
5

我认为您尝试做的事情无法在 R 中完成,即您需要使用 Paul Hiemstra 建议的 PDF 工具包等外部工具来组合具有不同页面尺寸的单独 PDF 文件(替代工具是PDFjam)。

如果您onefile = TRUE在调用中设置pdf(),则写入该 PDF 设备的每个图都将打印在单独的页面上,但页面尺寸相同。在您的示例中,您打开第一个 PDF 设备,向其写入一个绘图,然后打开第二个 PDF 设备,向其写入不同的绘图,然后关闭第二个 PDF 设备但保持第一个 PDF 设备处于打开状态。由于您file对两个调用使用相同的参数pdf(),您可能不会注意到第一个 PDF 设备仍处于打开状态。如果你关闭它,只有第一个情节会以"Combined_Graphs.pdf".

这是您的示例的修改版本,说明了如何打开、填充内容和关闭 PDF 设备:

pdf(file = "foo.pdf", onefile = TRUE, width = 8.5, height = 11)
hist(rnorm(100))
hist(rnorm(100, 10, 2), col = "red")
pdf(file = "bar.pdf", width =11, height = 8.5)
hist(rnorm(100, 10, 2), col = "blue")
dev.off()
dev.off()
于 2012-09-26T20:14:59.017 回答