2012-09-26 23 views
5

Vorrei stampare più grafici in un unico file pdf. So che c'è stato molto su questo, ma mi piacerebbe stampare diverse dimensioni di finestre/grafici per ogni pagina, vale a dire prima pagina a 8.5x11, seconda pagina 11x8.5 e così via. Ho provato questo:più grafici 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() 

devo utilizzerò onefile=TRUE sbagliato in quanto genera solo l'ultimo grafico prima della chiusura. C'è un modo migliore per dimensionare il dispositivo grafico senza dover chiamare la funzione pdf due volte?

risposta

7

Quello che vorrei fare è produrre PDF separati e combinarli in un secondo momento. Io uso the PDF toolkit per questo. Wrapping questo in una funzione R utilizzando una chiamata di sistema attraverso system rende anche script da R. La chiamata alla PDFTK avrà un aspetto simile:

pdftk *pdf cat output combined.pdf 

o in 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

Grazie !!! Questo è fantastico, funziona molto bene e non devo mai più usare Adobe Acrobat :) – austin

+0

Puoi fare tutti i tipi di cose buone con pdftk. Eseguendolo dalla riga di comando è facile scrivere script, ad es. tagliando pdf che consistono in sotto-report con lunghezza disuguale. –

+0

Se questa risposta ha risolto la tua domanda, non esitare a controllare il segno di spunta verde. –

4

Penso che quello che si sta cercando di fare non può essere fatto in R, cioè, è necessario utilizzare strumenti esterni come il toolkit PDF come suggerito da Paul Hiemstra per combinare file PDF separati con dimensioni di pagina diverse (uno strumento alternativo è PDFjam).

Se si imposta onefile = TRUE nella chiamata a pdf(), ciascun grafico che viene scritto su tale dispositivo PDF verrà stampato su una pagina separata, ma con le stesse dimensioni di pagina. Nel tuo esempio, apri un primo dispositivo PDF, scrivi un grafico, apri un secondo dispositivo PDF, scrivi un grafico diverso, quindi chiudi il secondo dispositivo PDF ma lascia aperto il primo dispositivo PDF. Poiché si utilizza lo stesso argomento file per entrambe le chiamate pdf(), è possibile che il primo dispositivo PDF sia ancora aperto. Se lo hai chiuso, solo il primo grafico sarebbe finito in "Combined_Graphs.pdf".

Ecco una versione modificata del vostro esempio che illustra come i dispositivi PDF vengono aperti, pieni di contenuti, e chiuso:

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