[R] Graphics: calling par(mar) after frame()

Brahm, David David.Brahm at geodecapital.com
Wed Jul 6 23:49:19 CEST 2005

I wrote:
> par(mfrow=c(3,2), las=2)
> for (i in 1:6) {
>   frame()
>   par(mar=c(7, 7, 1, 1))
>   axis(2); box(); abline(h=seq(0,1,.5), col=2:4)
> }
> The first plot's axes are mis-aligned with the plotting area...

Uwe Ligges <ligges at statistik.uni-dortmund.de> replied:
> Yes expected, at first you generate the plot, then you change the 
> margins, and then you add stuff (axis)...
> Why do you want to use it inside the loop?

Thanks, Uwe, for making it clearer.  My toy example puts these commands
inside a loop because my real-life problem has them inside a function,
which is called inside a loop.  My function sets par(mar, usr, mgp).
It seems I need to set par(mar) before frame(), par(usr) after frame(),
and par(mgp) either before or after.  I was not thinking of frame() as
"generating the plot" so much as "moving to the next location", so I
didn't understand why the order mattered.  Thanks again!

-- David Brahm (brahm at alum.mit.edu)

More information about the R-help mailing list