Interesting, I hadn't tried this but it probably explains why navigation to different regions of a layout is neither documented nor advisable.
Yet another alternative is to use Grid graphics. In particular, 1- lattice or ggplot2 provide ways to arrange several plots in a rectangular layout, with several options to add output to a specific panel (but they do require quite a different approach to the creation of plots) 2- for simple enough plots (or for brave users) you could also use low-level grid commands, and navigate to different viewports arbitrarily placed on a page. 3- the gridBase package provides a way to combine (with some limitations) the power of grid layouts and the output produced with base graphics. Best, baptiste 2009/10/12 Greg Snow <greg.s...@imail.org>: > This only works if all the plots are the same size and the defaults are used > for the margins. Try it with different sized figure regions in layout, the > added lines don't match at the end. > > -- > Gregory (Greg) L. Snow Ph.D. > Statistical Data Center > Intermountain Healthcare > greg.s...@imail.org > 801.408.8111 > > >> -----Original Message----- >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r- >> project.org] On Behalf Of baptiste auguie >> Sent: Sunday, October 04, 2009 3:33 AM >> To: r-help >> Subject: Re: [R] add lines() to 1st plot in layout() after calling 2nd >> plot()? >> >> Hi, >> >> Try this, >> >> dev.new() >> layout(matrix(1:4,2, by=T)) >> >> plot(1:10,main="top left plot") >> plot(1:10,main="top right plot") >> plot(1:10,main="bottom left plot") >> plot(1:10,main="bottom right plot") >> >> for (ii in 1:2){ >> for (jj in 1:2){ >> par(mfg=c(ii,jj)) >> text(5,2, lab=paste("plot #:",ii,",",jj,sep="")) >> } >> } >> par(mfg=c(1,1)) >> lines(c(3:7,7:3),col="red") >> >> HTH, >> >> baptiste >> 2009/10/4 Marianne Promberger <marianne.promber...@kcl.ac.uk>: >> > Thanks for the quick reply. However ... >> > >> > David Winsemius <dwinsem...@comcast.net> 03-Oct-09 20:50: >> > MP> layout(matrix(c(1,2),1)) >> > MP> plot(1:10,main="left plot") >> > MP> plot(10:1,main="right plot") >> > MP> lines(c(3:7,7:3),col="red") >> > MP> >> > MP> but of course now lines() gets added to the "right plot". I >> > MP> >> > MP> Is there any way to make the lines() go to the fist plot ("left >> > MP> plot")? >> >> >> >> If you look at layout's help page there appears to be a worked >> example >> >> of an even more complex task. The answer appears to be assingning >> >> numbers to regions and then inserting par(mar= with an >> appropriately >> >> constructed destination arguments prior to each added piece. >> > >> > Sorry, but I fail to find the solution in the page returned by >> > ?layout, assuming that's what you mean. >> > >> > Yes, the numbers in the matrix given to layout() give the order of >> > where plots will be put, so >> > >> > layout(matrix(c(2,1),1)) >> > >> > then >> > >> > plot(1:10,main="left plot") >> > plot(10:1,main="right plot") >> > lines(c(3:7,7:3),col="red") >> > >> > puts "left plot" on the right hand side and "right plot" on the >> > left. But the lines() still go to the "right plot" plot (now on the >> > left hand side) which gets called last. >> > >> > The par(mar ... of the "scatterplot with marginal histograms" example >> > just set the margins of the histogram plots, then they get plotted to >> > the region with the next number given in the layout() matrix. >> > >> > Maybe I'm missing something. >> > >> > Thanks, >> > >> > Marianne >> > >> >> >> >> -- >> >> David >> >> >> >> On Oct 3, 2009, at 3:15 PM, Marianne Promberger wrote: >> >> >> >>> Dear R users, >> >>> >> >>> I create a graphic with two plots side by side using layout(), like >> >>> this: >> >>> >> >>> layout(matrix(c(1,2),1)) >> >>> plot(1:10,main="left plot") >> >>> lines(c(3:7,7:3),col="red") >> >>> plot(10:1,main="right plot") >> >>> >> >>> The lines() obivously get added to the "left plot" plot. >> >>> >> >>> Now, I'm trying to write a function that builds up a plot bit by >> bit >> >>> to >> >>> then include it in a LaTeX presentation with overlays. I'm using >> >>> dev.copy(), and it would make my life much easier (because in fact >> I >> >>> call all sorts of additional axis() etc after plot) if I could call >> >>> the above commands in this order: >> >>> >> >>> layout(matrix(c(1,2),1)) >> >>> plot(1:10,main="left plot") >> >>> plot(10:1,main="right plot") >> >>> lines(c(3:7,7:3),col="red") >> >>> >> >>> but of course now lines() gets added to the "right plot". I >> >>> >> >>> Is there any way to make the lines() go to the fist plot ("left >> >>> plot")? >> >>> >> >>> Marianne >> >>> >> >> >> >> David Winsemius, MD >> >> Heritage Laboratories >> >> West Hartford, CT >> >> >> >> ______________________________________________ >> >> R-help@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. >> > >> > -- >> > Marianne Promberger PhD, King's College London >> > http://promberger.info >> > R version 2.9.2 (2009-08-24) >> > Ubuntu 9.04 >> > >> > ______________________________________________ >> > R-help@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. >> > >> >> ______________________________________________ >> R-help@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. > ______________________________________________ R-help@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.