2012-09-26 10 views
5

複数のグラフを1つのpdfファイルに出力したいと思います。私はこれに多くのことがあったことを知っていますが、私は各ページ、すなわち最初のページは8.5x11、2番目のページ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関数を2回呼び出すことなくグラフィックデバイスのサイズを決める良い方法はありますか?

答えて

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ツールキットなどの外部ツールを使用して、さまざまなページサイズ(別のツールはPDFjam)のPDFファイルを結合する必要があります。

pdf()に電話をかけてonefile = TRUEを設定すると、そのPDFデバイスに書き込まれた各プロットは、同じページサイズで別のページに印刷されます。あなたの例では、最初のPDFデバイスを開き、1つのプロットを書き込んだ後、2番目のPDFデバイスを開き、それに別のプロットを書き込み、2番目の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() 
関連する問題