多个图表的PDF文件 R

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函数?

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)
}

谢谢!!!这太棒了,运行非常顺利,我再也不必使用Adobe Acrobat了 :) - austin
你可以使用pdftk做各种有趣的事情。从命令行运行它可以轻松地进行脚本编写,例如切割由不等长子报告组成的pdf文件。 - Paul Hiemstra
如果这个答案解决了你的问题,请随意勾选绿色的勾号。 - Paul Hiemstra

5

我认为你想做的事情在R中无法完成,也就是说,你需要使用外部工具来合并不同页面尺寸的PDF文件,如Paul Hiemstra建议的PDF工具包或使用另一种工具PDFjam

如果在调用pdf()时设置onefile = TRUE,则写入该PDF设备的每个图都将打印在单独的页面上,但具有相同的页面尺寸。在您的示例中,您打开第一个PDF设备,将一个图写入其中,然后您打开第二个PDF设备,将不同的图写入其中,然后关闭第二个PDF设备,但保留了第一个PDF设备的打开状态。由于您在两个pdf()调用中使用相同的file参数,因此您可能没有注意到第一个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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接