ggplot - plot grid python
¿Cómo puedo obtener una grilla "desbalanceada" de ggplots? (3)
Con grid.arrange
puedo organizar varias figuras ggplot
en una grilla para lograr una figura de varios paneles usando algo como:
library(ggplot2)
library(grid)
library(gridExtra)
generar algunos gráficos ggplot2, luego
plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)
¿Cómo puedo obtener un diseño de 2 columnas "desequilibrado" con un trazado en todo el primer círculo y tres trazados en el segundo círculo? Jugué con un enfoque de "cuadrícula de grillas" al tratar de usar grid.arrange
para trazar una cuadrícula (por ejemplo, plot5
, arriba) contra otra trama, pero obtuve:
Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main, :
input must be grobs!
Actualizar:
Gracias por el consejo. Voy a mirar en los grid
viewports
y la grid
. Mientras tanto, gracias a @DWin, la función layOut
en el paquete ''wq'' funcionó muy bien para la figura de compilación en mi documento Sweave
:
Actualización 2:
El comando arrangeGrob
(como lo sugiere @baptiste) también funciona bien, y parece muy intuitivo, al menos fue fácil alterar el ancho de las dos columnas. También tiene el beneficio de no requerir el paquete `wq ''.
Por ejemplo, aquí está el código de mi archivo Sweave:
<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1),
ncol=2, widths=c(1,1.2))
@
/begin{figure}[]
/begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
/end{center}
/caption{Combined plots using the `arrangeGrob'' command.}
/label{fig:five}
/end{figure}
que produce el siguiente resultado:
Por cierto, ¿alguien me dice por qué aparece el ''> NA''?
Intenté resolverlo con la cuadrícula y pensé que lo tenía mal pero terminé fallando (aunque ahora miro el código en la función que cito a continuación, puedo ver que estaba muy cerca ... :-)
El paquete ''wq'' tiene una función layOut
que lo hará por usted:
p1 <- qplot(mpg, wt, data=mtcars)
layOut(list(p1, 1:3, 1), # takes three rows and the first column
list(p1, 1, 2), # next three are on separate rows
list(p1, 2,2),
list(p1, 3,2))
Otra alternativa es el paquete de patchwork
de Thomas Lin Pedersen.
# install.packages("devtools")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)
Genera algunas parcelas.
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + facet_grid(rows = vars(gear))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
Ahora arregla las parcelas.
p1 + (p2 / p3 / p4)
grid.arrange
dibuja directamente en el dispositivo; si quieres combinarlo con otros objetos de la cuadrícula, necesitas arrangeGrob
, como en
p = rectGrob()
grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1),
ncol=2)
Editar (07/2015): con v> 2.0.0 puede usar el argumento layout_matrix
,
grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))