Grid of multiple ggplot2 plots which have been made in a for loop

38,724

I would be inclined to agree with Richie, but if you want to arrange them yourself:

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)

take a look at the examples at the end of ?arrangeGrob for ways to eliminate the for loop altogether:

plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange,  plots)
Share:
38,724
fstevens
Author by

fstevens

Phd student in agronomy and spatial statistics

Updated on July 13, 2022

Comments

  • fstevens
    fstevens almost 2 years

    as a new ggplot2 user, I am a bit lost with the amount of possibilities, and struggle to find on the net a simple answer to what I consider a simple problem.

    I would like to display multiple plots from ggplot2 on a same sheet, BUT knowing that these plots come from a for loop.

    Following example does not compile, it is only to illustrate :

    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])
    }}
    

    Here, p is overwritten, but I would like to have instead a matrix or a list in which I can put all the p as they are produced, then a simple function like

    display_in_a_grid(list_of_ggplot_plots)
    

    But as far as I tried, I was not able to make a list of matrix of plot, neither to find a function that takes only one argument for input.

    About things I have had a look at :

    "arrangeGrob" from package gridExtra doesn't work because it requires an explicit name for each plot (e.g.: p1,p2,p3,...) like in http://code.google.com/p/gridextra/wiki/arrangeGrob

    "facet" method of ggplot2 is not adapted to the organization of my data set (or the contrary :p )

    Would you have a simple way to manage this ?

    Thank you,

    François

  • fstevens
    fstevens about 12 years
    Thanks. A lot clearer that information I read in help manuals, and an illustration of do.call function that I have never used. I will use this solution if I fail using facets.
  • Stepan S. Sushko
    Stepan S. Sushko about 7 years
    Your first example produces identical plots in the case of "qplot(c(1:10), c(10:1) + i, main = i)'"
  • CrashOverride
    CrashOverride about 6 years
    How would I use this to add grid.arrange parameters such as ncol, nrow, heights, widths, etc.
  • aaaaa
    aaaaa over 5 years