[R] write a png inside a pdf for large graphics?

Duncan Murdoch murdoch.duncan at gmail.com
Mon Apr 23 19:00:38 CEST 2012


On 23/04/2012 10:49 AM, Adam Wilson wrote:
> I routinely write graphics into multi-page PDFs, but some graphics (i.e.
> plots of large spatial datasets using levelplot()) can result in enormous
> files.  I'm curious if there is a better way.  For example:
>
> #First, make some data:
> library(lattice)
> d=expand.grid(x=1:1000,y=1:1000)
> d$z=rnorm(nrow(d))
>
> #Now, the PDF.  The following produces a PDF that's ~50MB.
> pdf(width=11,height=8.5,file="test1.pdf")
> levelplot(z~x*y,data=d)
> dev.off()
>
> #If you write the same graphic to a png with reasonable resolution, the
> file size is ~500k:
> png(width=1024,height=768,file="test1.png")
> levelplot(z~x*y,data=d)
> dev.off()
>
> #  I would prefer to embed a png (or other raster format) inside a PDF
> directly from R.
> #  Is this possible?  I'm looking for some way to achieve something like
> the following (of course this doesn't work):
> pdf(width=11,height=8.5,file="test1.pdf")
>       png(width=1024,height=768,file="current device")
>               levelplot(z~x*y,data=d)
>       dev.off()
> dev.off()
>
>
> Of course the PDF preserves vector scalability, but there are times it's
> not worth the extra file size.  And you can write out the png's as separate
> files and then merge them with imagemagick or ghostscript.  I currently get
> around this by writing the graphics to a potentially very large (>>100MB)
> PDF, then use ghostscript to convert *only* the large pages of the pdf to
> png and put it back together as a PDF (a function I wrote for this is
> described here:
> http://planetflux.adamwilson.us/2010/06/shrinking-rs-pdf-output.html).
>
> I'm curious if there is a way to do it directly by instructing R to write a
> png and embed it within the already open PDF device.  Any ideas?

I haven't tried this, but rasterImage() can plot to PDF.  So you just 
need to get your PNG display into a raster image.

Duncan Murdoch



More information about the R-help mailing list