[R] Multi-page PDF using dev.copy2pdf(filename, onefile=TRUE)?

David Winsemius dwinsemius at comcast.net
Mon Feb 6 21:40:57 CET 2012


On Feb 6, 2012, at 2:51 PM, Doug Hill wrote:

> Thanks Elai, that did it! I never considered using any X11 options,  
> as I'm on Windows, and in the docs I read it sounded like X11  
> options only pertained to the OSX/Linux/.. world. Thanks for your  
> help, Doug

You are confused about the difference of a named variable and its  
contents. There is no X11 device in that solution,  just a name for  
the current device which in your case is probably not an X11 device.  
If you looked at the value of `x11c`, you would see it's just a number.

Elai is just switching back and forth between the screen device and  
the file device.

-- 
David.

>
> --- On Mon, 2/6/12, ilai <keren at math.montana.edu> wrote:
>
> From: ilai <keren at math.montana.edu>
> Subject: Re: [R] Multi-page PDF using dev.copy2pdf(filename,  
> onefile=TRUE)?
> To: "Doug Hill" <logickle at yahoo.com>
> Cc: r-help at r-project.org
> Date: Monday, February 6, 2012, 12:24 PM
>
> Doug,
> dev.copy2pdf closes the connection after it's "done", so onefile is
> meaningless. To look at each plot before copy to a single pdf, you
> could open a pdf(...) but revert between it and your graphic device:
> graphics.off()
> plot(1:7, 1:7)
> x11c<- dev.cur()       # your current graphics device
> pdf(file="test.pdf")
> dev.set(which=x11c)   # back from pdf
> dev.copy()                  # copy
> dev.set(which=x11c)    # back to graphic
> plot(1:5, 1:5,col=2,pch=2)
> dev.copy()
> dev.set(which=x11c)
> # ...   etc. however many more plots
> # don't forget to close the pdf device at the end:
> dev.off(which=x11c+1)
> # Both plots are in 'test.pdf'
>
> Depending on your application you might be able to simplify things
> with dev.next/dev.prev, or wrap this sequence into a little helper
> function to be used in a loop.
>
> Enjoy,
> Elai
>
>
> On Mon, Feb 6, 2012 at 6:44 AM, Doug Hill <logickle at yahoo.com> wrote:
>> Hi all. I want to generate a sequence of n plots and save them into  
>> a single PDF file, one plot per page. From the R docs and other  
>> sources I gather the basic way to do this is save plot 1 into a  
>> file then append the 2:n plots to the same file.
>> This code shows my basic approach, but for some reason only the  
>> last plot is saved into the pdf. I've tried different variations  
>> (e.g. using onefile only in the second call, or only in the first),  
>> to no avail. The comments show what I see if I step through the  
>> code one line at a time:
>> scratch<-function() {
>> graphics.off()
>> plot(1:7, 1:7) # Opens a graphics window and displays a 7-point  
>> plot in it, as expected
>> dev.copy2pdf(file="test.pdf", onefile=TRUE) # I see the 7-point  
>> plot in Adobe reader, as expected
>> plot(1:5, 1:5) # Overwrites in the graphics window the 7-point plot  
>> with a 5-point, as expected
>> dev.copy2pdf(file="test.pdf", onefile=TRUE) # Overwrites test.pdf  
>> so that it contains only the 7-point plot
>> }
>> A couple things:
>> (1) The reason I don't just use something like pdf(filename)  
>> plot(...) plot(...) dev.off() is that I also want to see the plots  
>> before they're saved (I pause after each plot() command). But  
>> according to the docs for dev.copy2pdf(), that function accepts the  
>> same args as pdf() does, including onefile.
>> (2) I wrap my code in a function to be able to use it in the StatEt  
>> debugger in Eclipse.
>> If you know what I'm doing wrong, or know of a different/better  
>> way, advise away! Thanks, Doug
>>        [[alternative HTML version deleted]]
>>
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list