Skip to content

multiple lines on multiple plots

8 messages · James Annan, John Kane, jim holtman +2 more

#
I'm sure this must be trivial, but I'm a novice with R and can't work 
out how to handle the axes when I am constructing multiple plots on a 
page and try to return to a previous one to put multiple data sets it.

A simple example:
---
x<- 1:10
y<- (1:100)*3
par(mfcol=c(2,1))
plot(x)
plot(y)

par(mfg=c(1,1))
lines(x)
---

The first 5 lines make two plots with a row of dots along the diagonal 
of each. I intended the last two statements to add a line to the first 
plot, that runs along the same data points already plotted there. 
However, although the commands add a line to the top plot, it is clearly 
using the axis dimensions of the lower plot. Can someone tell me how to 
get it to use the axes that are already there?

Variants like lines(x,xlim=c(1,10)) have no effect.

Thanks in advance for any help.

James
#
Try this.

=======================
x<- 1:10
y<- (1:100)*3
par(mfcol=c(2,1))
plot(x, type="o")
plot(y)
=======================
--- On Tue, 4/12/11, James Annan <jdannan at jamstec.go.jp> wrote:

            
#
Instead of trying to go back to a previous plot, gather up all the
data for the plots and generate each one with the appropriate data.
This is much easier than trying to keep track of what the dimensions
are.  Also if the data you want to add is outside the plot, then you
have issues with clipping; knowing what the dimensions of all the data
you want to plot is a reasonable way to go.
On Tue, Apr 12, 2011 at 9:30 AM, James Annan <jdannan at jamstec.go.jp> wrote:

  
    
#
Or perhaps this as an example of using lines() rather than just getting a line and dot output in the upper graph.
  x <- 1:10
 y <- (1:100)*3
 z <- rnorm(100, 150, sd= 75)
 a <- rnorm(10,mean=5, sd= 2.5)
 par(mfcol=c(2,1))
 plot(x)
lines(a, col= "red")
plot(y)
lines(z , col="blue")
--- On Tue, 4/12/11, John Kane <jrkrideau at yahoo.ca> wrote:

            
#
Thanks for all the replies. Yes, I agree that calculating all the data 
first is a simple solution which also has the benefit of making the axis 
choice easier to get right, but on the downside it requires storing an 
order of magnitude more output than my original sequential approach 
would have done. Not actually a problem for me right now, but may be for 
larger cases and certainly seems inelegant in general. So I'm still 
interested to know if there is some practical way of returning to an 
earlier plot. I suppose I could artificially scale the data to make it 
match the wrong axes. But that would be horrible.

(The example was deliberately simple, but in reality I want to loop 
through a bunch of simple simulations each of which generates several 
types of output, and create a graph for each type of output.)

James
On 13/4/11 1:25 AM, jim holtman wrote:

  
    
#
Hi,

ggplot2 automatically adjusts its axes when new data are added to
plots; however you wouldn't get an automatic legend if you constructed
plots that way.

HTH,

baptiste
On 13 April 2011 17:06, James Annan <jdannan at jamstec.go.jp> wrote:
5 days later
#
Going back to a previous graph does not automatically restore the coordinate system (as you noticed).  But you can store that information (lot less info than your data in most cases) and reset it manually.  Try:

x<- 1:10
y<- (1:100)*3
par(mfcol=c(2,1))
plot(x)
tmp1 <- par('usr')
plot(y)
tmp2 <- par('usr')

par(mfg=c(1,1))
par(usr=tmp1)
lines(x)
par(mfg=c(2,1))
par(usr=tmp2)
lines(y)
#
Thanks! I'd seen this sort of trick mentioned in places, but didn't twig 
what it did. This is exactly what I was looking for.

James
On 19/4/11 7:04 AM, Greg Snow wrote: