rpdfplotpnggraphic

writing png plots into a pdf file in R


I have to create a bunch of graphs with a lot of data points. So far, I've been doing this by plotting all of them into one pdf-file:

pdf("testgraph.pdf")  
par(mfrow=c(3,3))

for (i in 2:length(names(mtcars))){
  plot(mtcars[,1], mtcars[,i])
}

dev.off()

However, with a lot of data points the pdf file becomes too large. As I'm not interested in outstanding quality, I don't care if my plots are vector graphics or not. So I thought of creating the plots as png and subsequently inserting them into a pdf file. Is there a way to do this except of creating R graphs and inserting them into pdf with knitr (which I think is too tedious for such a simple job)?


Solution

  • You can

    1. create .png files of each plot
    2. use the png package to read those back in and
    3. plot them in a pdf using grid.arrange
    library(png)
    library(grid)
    library(gridExtra)
    
    thePlots <- lapply (2:length(names(mtcars)), function(i) {
      png("testgraph.png")
      plot(mtcars[,1], mtcars[,i])
    
      dev.off()
      rasterGrob(readPNG("testgraph.png", native = FALSE),
        interpolate = FALSE)
    })
    
    pdf("testgraph.pdf")
    do.call(grid.arrange, c(thePlots, ncol = 3))
    dev.off()