tutorial - Cuadrícula de múltiples gráficos ggplot2 que se han realizado en un bucle for
superponer graficas en r ggplot (2)
Como nuevo usuario de ggplot2, estoy un poco perdido con la cantidad de posibilidades y me cuesta encontrar en la red una respuesta simple a lo que considero un problema simple.
Me gustaría mostrar múltiples gráficos de ggplot2 en una misma hoja, PERO sabiendo que estos gráficos provienen de un bucle for.
El siguiente ejemplo no se compila, solo sirve para ilustrar:
for(i in c(1:n)){
for(j in c(1:m)){
.......... # some data production
p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}
Aquí, p se sobreescribe, pero me gustaría tener una matriz o una lista en la que pueda poner todas las p a medida que se producen, luego una función simple como
display_in_a_grid(list_of_ggplot_plots)
Pero en la medida en que lo intenté, no pude hacer una lista de matrices de trama, ni encontrar una función que tome solo un argumento para la entrada.
Sobre las cosas que he echado un vistazo:
"OrganizarGrob" del paquete gridExtra no funciona porque requiere un nombre explícito para cada gráfico (por ejemplo: p1, p2, p3, ...) como en http://code.google.com/p/gridextra/wiki/arrangeGrob
El método "faceta" de ggplot2 no está adaptado a la organización de mi conjunto de datos (o lo contrario: p)
¿Tendrías una forma sencilla de gestionar esto?
Gracias,
François
Esta es mi solución. Pequeño cambio en la función ggplot
con el parámetro de mapping
a aes_string
.
library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p <- ggplot(data=df,aes_string(x=df$x,y=df$y) +geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}
do.call(grid.arrange,p)
¡Espero que esto ayude!
Me sentiría inclinado a estar de acuerdo con Richie, pero si quiere organizarlos usted mismo:
library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- qplot(1:10,10:1,main=i)
}
do.call(grid.arrange,p)
eche un vistazo a los ejemplos al final de ?arrangeGrob
para encontrar formas de eliminar el bucle for por completo:
plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange, plots)