Marianne Promberger
2009-Oct-03 19:15 UTC
[R] add lines() to 1st plot in layout() after calling 2nd plot()?
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 -- Marianne Promberger PhD, King's College London http://promberger.info R version 2.9.2 (2009-08-24) Ubuntu 9.04
David Winsemius
2009-Oct-03 19:50 UTC
[R] add lines() to 1st plot in layout() after calling 2nd 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. -- 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
Greg Snow
2009-Oct-12 17:57 UTC
[R] add lines() to 1st plot in layout() after calling 2nd plot()?
Since you are using LaTeX, you might consider creating the plots all in 1 step, but use the tikzdevice, this provides LaTeX (pgf) commands to create the plot that you can then insert LaTeX commands to built up the plot bit by bit. You could also look at using the subplot function in the TeachingDemos package, start with a blank plot without margins, then use subplot in place of layout to position your graphs, the examples in the help file for subplot show how to add to the subplot after creating it. Another option is to create a function that creates each whole plot, but with an argument and some if statements that will skip certain steps, then just do a for loop calling the functions to build the plots in pieces. This means replotting from scratch each step, but save these as graphics files and it is not overly complex. Hope this helps, -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.snow at imail.org 801.408.8111> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of Marianne Promberger > Sent: Saturday, October 03, 2009 1:15 PM > To: r-help > Subject: [R] add lines() to 1st plot in layout() after calling 2nd > plot()? > > 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 > > -- > Marianne Promberger PhD, King's College London > http://promberger.info > R version 2.9.2 (2009-08-24) > Ubuntu 9.04 > > ______________________________________________ > 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.