2012-09-26 24 views
5

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

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

回答

7

我会做的是生产单独的PDF和他们结合他们以后。我为此使用the PDF toolkit。使用系统调用通过system在R函数封装这甚至使得它从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) 
} 
+0

谢谢!这是真棒,工作得很好,我再也不用再使用Adobe Acrobat了:) – austin

+0

你可以用pdftk做各种各样的整洁东西。从命令行运行它可以很容易地编写脚本,例如截取不同长度的子报告组成的pdf。 –

+0

如果这个答案解决了你的问题,请随时检查绿色的标记。 –

4

我想你试图做的事情不能在R中完成,也就是说,您需要使用外部工具,如Paul Hiemstra所建议的PDF工具包,将各个不同页面尺寸的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()