2012-09-26 16 views
5

Me gustaría imprimir múltiples gráficos en un archivo pdf. Sé que ha habido mucho sobre esto, pero me gustaría imprimir diferentes tamaños de ventana/gráfico para cada página, es decir, la primera página una 8.5x11, la segunda página 11x8.5 y así sucesivamente. He intentado esto:gráficos múltiples 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() 

debo estar usando onefile=TRUE equivocado, ya que sólo genera el último gráfico antes del cierre. ¿Hay una mejor manera de dimensionar el dispositivo gráfico sin tener que llamar a la función pdf dos veces?

Respuesta

7

Lo que haría sería producir PDF separados y combinarlos más tarde. Yo uso the PDF toolkit para esto. Envolver esto en una función de R, mediante una llamada al sistema a través system incluso hace que sea scripts de R. La llamada a PDFTK se verá algo como:

pdftk *pdf cat output combined.pdf 

o en I:

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

Gracias !!! Esto es increíble, funciona muy bien y nunca más debo usar adobe acrobat :) – austin

+0

Puedes hacer todo tipo de cosas ordenadas con pdftk. Ejecutarlo desde la línea de comandos facilita la creación de scripts, p. recortar pdf que consisten en subinformes con una longitud desigual. –

+0

Si esta respuesta resolvió su pregunta, no dude en consultar el tickmark verde. –

4

Creo que lo que están intentando hacer lo que no se puede hacer en R, es decir, necesita utilizar herramientas externas como el PDF toolkit como lo sugiere Paul Hiemstra para combinar archivos PDF separados con distintas dimensiones de página (una herramienta alternativa es PDFjam).

Si configura onefile = TRUE en su llamada al pdf(), cada trazado que se escribe en ese dispositivo PDF se imprimirá en una página separada, pero con las mismas dimensiones de página. En su ejemplo, abre un primer dispositivo PDF, escribe un gráfico en él, luego abre un segundo dispositivo PDF, le escribe un gráfico diferente y luego cierra el segundo dispositivo PDF, pero deja abierto el primer dispositivo PDF. Dado que utiliza el mismo argumento file para ambas llamadas pdf(), es posible que no observe que el primer dispositivo PDF aún está abierto. Si lo cerraste, solo el primer diagrama terminaría en "Combined_Graphs.pdf".

Aquí es una versión modificada de su ejemplo que ilustra cómo se abren los dispositivos de PDF, llenos de contenido y cerrados:

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