writing png plots into a pdf file in R

蹲街弑〆低调 提交于 2019-11-30 01:51:54

问题


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)?


回答1:


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()



回答2:


If the source of the problem is too many points in the plot then you might want to consider using hexagonal binning instead of a regular scatterplot. You can use the hexbin package from bioconductor or the ggplot2 package has hexagonal binning capabilities as well. Either way you will probably get a more meaningful plot as well as smaller file size when creating a pdf file directly.




回答3:


You can convert the PNG files to PDF with ImageMagick

for i in *.png
do
  convert "$i" "$i".pdf
done

and concatenate the resulting files with pdftk.

pdftk *.png.pdf output all.pdf


来源:https://stackoverflow.com/questions/18852395/writing-png-plots-into-a-pdf-file-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!