[R-es] Ayuda con dev.copy2pdf - Ejemplo reproducible

daniel daniel319 en gmail.com
Mar Feb 26 21:02:45 CET 2013


Eva,

En tu ejemplo en lugar de par(mfrow=c(3,1)) pon lo siguiente

windows(width=8.27, height=11.69)
layout(matrix(c(1,1,1,2,2,2,3,3,3), 3, 3, byrow = TRUE), heights = c(1, 4,1))

y fijate si es lo que quieres (quizás sea heights = c(1, 3,1)). Lo
anterior se sigue directamente de leer lo que te envié antes. No puede
ser que no lo puedas ver por pantalla ya que lo corrí sin problemas ¿?

Daniel Merino


El 26 de febrero de 2013 16:02, Eva Prieto Castro
<evapcastro en yahoo.es> escribió:
>
> Hola de nuevo:
>
> Un buen punto de partida para mí sería ésto:
>
> x <- 1:10
> a <- runif(10, 0, 5)
> b <- runif(10, 0, 5)
> c <- runif(10, 0, 5)
>
> ylim <- c(0, 5)
>
> par(mfrow=c(3,1))
>
> par(mar=c(0,4.1,2.1,3.1))
> #par(mfrow=c(3,1), mar=c(0,4,0,2)+0.1, oma=c(5,0,3,0)+0.1 )
>
> plot(x, a, type="o", ylim=ylim, axes=FALSE)
> axis(1, labels=FALSE)
> axis(2)
> axis(3)
> axis(4)
> box()
>
> par(mar=c(0,4.1,0,3.1))
>
> plot(x, b, type="o", ylim=ylim, axes=FALSE)
> axis(1, labels=FALSE)
> axis(2)
> axis(3, labels=FALSE)
> axis(4)
> box()
>
> par(mar=c(2.1,4.1,0,3.1))
>
> plot(x, c, type="o", ylim=ylim, axes=FALSE)
> axis(1)
> axis(2)
> axis(3, labels=FALSE)
> axis(4)
> box()
>
>
> El plot central lo utilizaría para la gráfica propiamente dicha, y los otros dos los pondría sin ejes visibles, para mostrar texto y tabla de resultados, así como franjas colindantes con los ejes horizontales del plot central.
>
> El problema es que no consigo manejar el height de esos plot. Necesito que el central tenga una proporción de 4 a 1 respecto a los otros dos.
>
> Daniel, si lo hago con layout no consigo que me queden así solapados.
>
> ¿Se os ocurre algo?.
>
>
> Gracias.
>
> Eva
>
>
> --- El mar, 26/2/13, daniel <daniel319 en gmail.com> escribió:
>
>
> De: daniel <daniel319 en gmail.com>
> Asunto: Re: [R-es] Ayuda con dev.copy2pdf - Ejemplo reproducible
> Para: "Eva Prieto Castro" <evapcastro en yahoo.es>
> CC: r-help-es en r-project.org
> Fecha: martes, 26 de febrero, 2013 18:26
>
>
> Eva,
>
> Revisa los paquetes grid y gridExtra que tienen sus propias versiones de layout.
>
> Daniel Merino
>
> El 26 de febrero de 2013 13:58, Eva Prieto Castro <evapcastro en yahoo.es> escribió:
>
>
> Daniel, ¿no hay manera de determinar un height (o equivalente) para los plot sin usar layout?. En caso de que lo haya, ¿cómo se establece sobre qué plot voy a pintar/escribir?.
>
> Gracias
>
>
> Eva
>
> --- El mar, 26/2/13, daniel <daniel319 en gmail.com> escribió:
>
>
> De: daniel <daniel319 en gmail.com>
> Asunto: Re: [R-es] Ayuda con dev.copy2pdf - Ejemplo reproducible
> Para: "Eva Prieto Castro" <evapcastro en yahoo.es>
> CC: r-help-es en r-project.org
> Fecha: martes, 26 de febrero, 2013 17:37
>
>
> Eva, has definido la función layout, aunque creo recordar que no te servía tampoco.
>
> windows(width=8.27, height=11.69)
> layout(matrix(c(1,1,1,2,2,2,3,3,3), 3, 3, byrow = TRUE), heights = c(1, 3,1))
> plot(1:2, ylim=c(1,2))
> plot(1:3, ylim=c(1,20))
> text( 2, 10, "ABC")
> mtext("Plot of b vs b",side=1, line=2)
> plot(1:4, ylim=c(1,3))
> mtext("Plot of a vs a",side=3, line=2)
>
>
> Daniel Merino
>
> El 26 de febrero de 2013 13:00, Eva Prieto Castro <evapcastro en yahoo.es> escribió:
>
> Hola!
>
> Creo que ya sé cómo puedo hacer: coloco 3 plot (el central es el que va a tener los ejes visibles; los otros dos plots los voy a destinar a información complementaria; será texto en el caso del plot superior y tabla con título en el caso del plot inferior). De ese modo consigo que el dev.copy2plot expanda todo.
>
> A continuación pongo un ejemplo básico, pero lo que no sé es cómo conseguir ajustar la altura de cada plot, porque ponga el ylim que ponga, los hace iguales, como podéis comprobar al ejecutar ésto:
>
> library(plotrix)
>
> graphics.off()
>
> windows(width=8.27, height=11.69)
>
>
> par(mfrow=c(3,1), mar=c(2, 2, 2, 1.5), oma=c(1, 1, 2, 0))
> plot(1:2, ylim=c(1,2))
> plot(1:3, ylim=c(1,20))
> plot(1:4, ylim=c(1,3))
> mtext("Plot of a vs a",side=3,outer=TRUE)
> dev.copy2pdf(file="MeVarios.pdf",height=11.69, width=8.27)
>
> shell.exec(file.path(getwd(), "MeVarios.pdf"))
>
>
> A ver si me podéis iluminar.
>
>
> Gracias.
>
> Eva
> --- El mar, 26/2/13, Eva Prieto Castro <evapcastro en yahoo.es> escribió:
>
>
> De: Eva Prieto Castro <evapcastro en yahoo.es>
>
> Asunto: Re: [R-es] Ayuda con dev.copy2pdf - Ejemplo reproducible
> Para: "daniel" <daniel319 en gmail.com>
> CC: r-help-es en r-project.org
> Fecha: martes, 26 de febrero, 2013 16:09
>
>
>
> Hola de nuevo,
>
> Volviendo sobre el mismo problema que comentaba esta mañana, me pregunto si es posible crear una especie de plot imaginario (sin ejes visualizados ni labels ni nada) que ocupe todo la pantalla gráfica, y dentro de él meter todo lo que me interese (mi plot, mis text(), mi tabla, etc.). Sería un modo de engañar al dev.copy2pdf, que supuestamente expandiría el plot imaginario, y entonces por extensión quedaría expandido todo lo que haya dibujado en su interior.
>
> A lo mejor es muy descabellado, pero por si acaso prefiero consultaros...
>
> Gracias.
>
> Eva
> --- El mar, 26/2/13, daniel <daniel319 en gmail.com> escribió:
>
>
> De: daniel <daniel319 en gmail.com>
> Asunto: Re: [R-es] Ayuda con dev.copy2pdf - Ejemplo reproducible
> Para: "Eva Prieto Castro" <evapcastro en yahoo.es>
> CC: r-help-es en r-project.org
> Fecha: martes, 26 de febrero, 2013 15:50
>
> Eva,
>
> Respecto del primer mensaje lo que hice fue calcular el 70% del alto y el ancho (arbitrario para que ingresara al área el texto superior), puede ser que la proporción correcta sea diferente, cuestión de ajustar hasta que conforme. No veo problemas para que esto lo incluyas en una función al fin y al cabo esas proporciones deberían mantenerse en la medida que los textos que pongas por fuera del área del plot no sean muy diferentes.
>
> Respecto del segundo mensaje, abrí el IntentoEnesimo.pdf en mi Adobe Reader 9 Versión 9.2.0.124 en una sesión de Windows XP, lo mandé a la impresora e imprimió todo. Para la impresión desde el Adobe Reader elegí como escala de página tanto "Ninguno" (supongo deriva al tamaño de la página que esta configurada como A4) como "Ajustar a área de Impresión". Los resultados como es de esperar son diferentes en cuanto a los márgenes pero en ambos casos a mi me imprimió todo.
>
> Daniel Merino
>
>
>
> El 26 de febrero de 2013 09:47, Eva Prieto Castro <evapcastro en yahoo.es> escribió:
>
>
> Daniel, así funciona, al menos el ejemplo básico que os reporté. Pero no entiendo el porqué; ¿cómo calculaste eso?.
>
> El método que elija como definitivo tengo que generalizarlo; es decir, ponerlo como función. ¿Qué criterio debo utilizar entonces?.
>
> Eva
> --- El mar, 26/2/13, daniel <daniel319 en gmail.com> escribió:
>
>
> De: daniel <daniel319 en gmail.com>
> Asunto: Re: [R-es] Ayuda con dev.copy2pdf - Ejemplo reproducible
> Para: "Eva Prieto Castro" <evapcastro en yahoo.es>
> CC: r-help-es en r-project.org
> Fecha: martes, 26 de febrero, 2013 13:28
>
>
> Eva por que no mantienes las proporciones del área del plot respecto
> del tamaño de la hoja, no se si serán las mejores proporciones en tu
> ejemplo, es cuestión de probar, pero algo así:
>
> dev.copy2pdf(file="IntentoEnesimo.pdf",height=8.18, width=5.79)
>
> Daniel Merino
>
>
> El día 26 de febrero de 2013 07:11, Eva Prieto Castro
> <evapcastro en yahoo.es> escribió:
> >
> > Buenos días:
> >
> > Sigo cabezudeando con el tema de los gráficos; a ver si a alguien se le ocurre alguna idea...
> >
> > Supongamos este código:
> >
> > library(plotrix)
> > graphics.off()
> > windows(width=8.27, height=11.69)
> >
> > plot(3:10)
> > #plot(3:10, main="Axis break test")
> > par(xpd=TRUE)
> > text(4, 11,"Axis break test")
> > axis.break()
> > axis.break(2,2.9,style="zigzag")
> > mtext("Texto adicional", side=1, line=2)
> > text(4, 9,"Texto")
> >
> > dev.copy2pdf(file="IntentoEnesimo.pdf",height=11.69, width=8.27)
> > shell.exec(file.path(getwd(), "IntentoEnesimo.pdf"))
> >
> > Como podéis comprobar, el título "Axis break test" aparece en la pantalla gráfica, pero no en el pdf. Ésto es así porque lo escribo con text(). Si retiro la línea text(4, 11,"Axis break test") y cambio plot(3:10) por plot(3:10, main="Axis break test") sí que aparece en el pdf. Es lógico: forma parte del plot, y se tiene en cuenta al "expandir" el plot para su volcado en pdf. Pero sucede que necesito lograr un correcto funcionamiento para este caso (fuera del plot, con text()), porque debo dar cobertura a gráficos que llevan "información" (texto, líneas emulando eje horizonal superior, etc.) fuera del plot pero anexa a éste. No sé si me explico...
> >
> > ¿Se os ocurre alguna forma?. He probado utilizando layout y tampoco lo consigo. Es como si el plot adquiriese el protagonismo total y absoluto para el dev.copy2pdf.
> >
> > Gracias.
> >
> > Eva
> >
> > P.D.: Debo descartar alternativas tales como el uso del paquete qqplot2 (no lo podría compatibilizar con funciones que tengo que usar necesariamente dentro de la región del plot), y también descarto hacer pdf() y dev.off().
> >
> >
> >         [[alternative HTML version deleted]]
> >
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es en r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
>
>
>
> --
> Daniel
>
>
>
>
> --
> Daniel
>
>
>
>
> --
> Daniel
>
>
>
>
> --
> Daniel




--
Daniel



Más información sobre la lista de distribución R-help-es