2012-09-26 25 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()