我想在一个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函数?
答案 0 :(得分: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)
}
答案 1 :(得分:4)
我认为你要做的事情不能在R中完成,也就是说,你需要使用外部工具,如Paul Hiemstra建议的PDF工具包,将不同的PDF文件与不同的页面尺寸结合起来(另一种工具是{ {3}})。
如果您在调用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()