I produced 3D graphics with the rgl package for each level coefficient of my data and saved them as png. My data has 30 different levels, resulting in 30 different image files. Now I would like to combine these png into one plot.
I would display them as follows:

The following example illustrates what I would like to do:
library(rgl) library(png) library(gridExtra) library(ggplot2) ## creates a png in the working directory which can be used as an example example(surface3d) rgl.snapshot("example.png") rgl.close() ## imports the png files; in the example, the same file is imported multiple times. if(exists("png.df")) rm(png.df) for (i in 1:9) { png.i <- readPNG("example.png") g <- rasterGrob(png.i, interpolate=TRUE) g <- g$raster g <- as.vector(g) g <- matrix(g, nrow = 256, ncol = 256, dimnames = list(1:256, 1:256)) df.i <- data.frame(i = rep(row.names(g), dim(g)[2]), j = rep(colnames(g), each = dim(g)[1]), col=as.vector(g)) df.i$i <- as.numeric(as.character(df.i$i)) df.i$j <- as.numeric(as.character(df.i$j)) df.i$col <- as.character(df.i$col) df.i$title <- paste ( "Plot", i) if(exists("png.df")) { png.df <- rbind(png.df, df.i) } else { png.df <- df.i } } rm(df.i, g) ## plots the data pl <- ggplot(png.df, aes( x = i, y = j)) pl <- pl + geom_raster(aes(fill = col)) + scale_fill_identity() pl <- pl + scale_y_reverse() pl <- pl + facet_wrap( ~ title) pl <- pl + coord_equal() + theme_bw() + theme(panel.grid = element_blank(), axis.text = element_blank(), axis.title = element_blank(), axis.ticks= element_blank()) pl
This works pretty well, but it's pretty slow. Real pngs have a much higher resolution, and I would like to build 30 png, not just 9, which leads to the fact that my machine does not completely respond for a long time (i7, 8GB RAM).
Part of the import works quite well, but the resulting data frame is extremely large (4.5e + 07 lines), which ggplot (understandably) cannot handle properly.
How can you quickly and effectively create a plot? Preferably with R, but other software may also be used.