library(ggplot2)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
# In my real example,a plot function will fit a ggplot to a list of datasets
#and return a list of ggplots like the example above.
Me gustaría arreglar las parcelas usando grid.arrange()in gridExtra.
¿Cómo haría esto si el número de parcelas plistes variable?
Esto funciona:
grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])
pero necesito una solución más general. pensamientos?


grid.arrange(plist[[1:length(plist)]], ncol = nCol))Recibo un error como este:Error in hl.plots[[1:12]] : no such index at level 3¡Gracias!x <- list(1,2); x[[3:1]]. En términos más generales, use algo como enplist[...]lugar deplist[[...]]hacer su subconjunto. Y luego usedo.call(), que tenemos que usar porquegrid.arrange()no está configurado para tomar una lista como su primer argumento. Saludos y mucha suerte!Puede usar
grid.arrange()yarrangeGrob()con listas siempre que especifique la lista usando elgrobs =argumento en cada función. Por ejemplo, en el ejemplo que dio:library(ggplot2) library(gridExtra) df <- data.frame(x=1:10, y=rnorm(10)) p1 <- ggplot(df, aes(x,y)) + geom_point() plist <- list(p1,p1,p1,p1,p1) grid.arrange(grobs = plist, ncol = 2) ## display plot ggsave(file = OutFileName, arrangeGrob(grobs = plist, ncol = 2)) ## save plotfuente
En aras de la integridad (y como esta vieja pregunta ya respondida ha sido revivida recientemente ), me gustaría agregar una solución usando el
cowplotpaquete:cowplot::plot_grid(plotlist = plist, ncol = 2)fuente
Error in ggplot_to_gtable(x) : Argument needs to be of class "ggplot" or "gtable"ggplot2paquete o los gráficos base?ggplot2.grid.arrangecasi funcionó para mí, pero resulta que mi lista de parcelas no se está completando. Publiqué el problema como una pregunta: stackoverflow.com/questions/43216262/… . Entonces, me pregunto si ese también podría haber sido el problema de la trama de la vacaSé que la pregunta establece específicamente el uso del paquete gridExtra , pero la
wrap_plotsfunción del paquete patchwork es una excelente manera de manejar la lista de longitud variable:library(ggplot2) # devtools::install_github("thomasp85/patchwork") library(patchwork) df <- data.frame(x=1:10, y=rnorm(10)) p1 <- ggplot(df, aes(x,y)) + geom_point() plist <- list(p1,p1,p1,p1,p1) wrap_plots(plist)Algo útil de esto es que no es necesario especificar cuántas columnas se requieren y el objetivo es mantener el número de columnas y filas iguales. Por ejemplo:
plist <- list(p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1) wrap_plots(plist) # produces a 4 col x 4 row plotfuente
devtools::install_github("thomasp85/patchwork")?Para ajustar todos los gráficos en una página, puede calcular el número de columnas y filas de esta manera:
x = length(plots) cols = round(sqrt(x),0) rows = ceiling(x/cols)Como la mayoría de las funciones de trazado múltiple tienen ncol y nrow como argumentos, puede ponerlos allí. Me gusta ggarrange de ggpubr.
Esto favorece más filas que columnas, así que invierta si desea lo contrario. Es decir, para 6 parcelas dará 3 filas y 2 columnas y no al revés.
fuente