[R] how to use axes=FALSE to get multple plots?

Duncan Murdoch murdoch at stats.uwo.ca
Tue Feb 10 15:27:45 CET 2009

Dan Kelley wrote:
> I am trying to plot two things on one graph, with a y-axis at the left for
> one variable, and a y-axis at the right, for the other variable.  I thought
> I could do as follows
> par(mar=rep(4.5, 4))
> plot(0:10, 10:20)
> par(new=TRUE)
> plot(0:10, 100:110, axes=FALSE)
> axis(4)
> but this writes both y-axis labels on the left-hand side, and nothing on the
> right-hand side.  This is R 2.8.1 (2008-12-22) on OS-X.
> Am I missing something?  
> PS. I know that I can just make ylab="" and draw the right-hand axis name
> with mtext, but that then I would need to check par(mgp), to find where
> place it, etc.  I'm thinking that I am just missing something in my
> understanding.
axis() doesn't draw axis labels.  There isn't a simple function for 
drawing text on side 4 as far as I know, but mtext is not so bad:  use

mtext("Right label", side=4, line=3)

to emulate the default ylab, but put it on the right.  See ?title for 
more details if you've changed the default locations.

I don't like to use plot(new=TRUE), because there are lots of things 
that can go wrong when you overplot high level graphics (I'd use 
points() instead), but your example is one of the few cases where you 
can make just as many errors using points() as using par(new=TRUE).  Are 
you really sure you want a graph with two different scales on it?

Duncan Murdoch

More information about the R-help mailing list