From osoong at bren.ucsb.edu  Mon Oct 29 18:54:18 2007
From: osoong at bren.ucsb.edu (Oliver Soong)
Date: Mon, 29 Oct 2007 10:54:18 -0700
Subject: [Rd] pairs, par
In-Reply-To: <472610D1.4060900@acm.org>
References: <7559d52e0710290855wdc0908eh64cbbac96cabc07d@mail.gmail.com>
	<472610D1.4060900@acm.org>
Message-ID: <7559d52e0710291054k4beadea6w7c4e8c957cc46dab@mail.gmail.com>

I dug around in pairs, and I think it has something to do with the
on.exit(par(opar)) bit:

f <- function() {
	opar <- par(mfrow = c(2, 2), mar = rep(0.5, 4), oma = rep(4, 4))
	on.exit(par(opar))
	for(i in 1:4) plot(0:1, 0:1)
	par(c("mfg", "omd", "fig", "plt", "usr"))
	print(opar)
}
f()
par(xpd = NA)
par(c("omd", "fig", "plt", "usr"))
points(0 - 0.01 * 1:100, 0 - 0.01 * 1:100)
points(0 - 0.01 * 1:100, 1 + 0.01 * 1:100)
points(1 + 0.01 * 1:100, 0 - 0.01 * 1:100)
points(1 + 0.01 * 1:100, 1 + 0.01 * 1:100)

My guess is that there are 2 sets of graphical parameters, the ones
stored in par and the ones used by the plotting functions.  Before
par(opar) gets called, the two are synchronized.  When par(opar) gets
called, we somehow set new values for par without changing the ones
used by the plotting functions, and the data used by points becomes
out of sync with the par information.

This is reflected in this much simpler example:

x11()
par(c("omd", "fig", "plt", "usr"))
points(0, 0)

Again, par is defined, but this time the data used by the plotting
functions has not been set, and an error occurs.

Thanks for the workaround suggestion.  I guess I can always define a
new plotting region to force par and the plotting data to
re-synchronize.  It might be nice if those two didn't go out of sync,
as I had assumed par would always be reliable.

Oliver


On 10/29/07, Tony Plate <tplate at acm.org> wrote:
> I would look into the code for pairs().  Among other things, it sets and
> restores par(mfrow=...).  I suspect this is the relevant issue, not the
> use of pairs().  I would try to figure out what state a graphics device
> is in after resetting par("mfrow").  When I try the following (R 2.6.0
> patched, under Windows), I see a line on the plot, but not in a place
> that corresponds to the axis that were drawn by the 'plot()' command:
>
>  > par(mfrow=c(2,2))
>  > plot(1:2)
>  > par(mfrow=c(1,1))
>  > lines(1:2,1:2)
>  >
>
> (and if you want to be able to set up a new coordinate system on the
> plotting device to draw on top of the plot left by pairs(), look at
> par("new") & something like plot(0:1, type='n', axes=F, xlab=""))
>
> hope this helps,
>
> Tony Plate
>
> Oliver Soong wrote:
> > Hi,
> >
> > I posted over at R-help, and didn't get a response, but perhaps that
> > was the wrong forum for this question.  I'm having some confusion over
> > the coordinate system after using pairs.  I'm not interested in the
> > content of the actual pairs plot, although the number of pairs seems
> > to matter a bit.  I'm purely interested in knowing where subsequent
> > points will be plotted on the device.  However, after using pairs, the
> > par information (omd, fig, plt, and usr) don't reflect what points
> > does.  For example:
> >
> > pairs(iris[1:5])
> > par(xpd = NA)
> > points(0 - 0.01 * 1:100, 0 - 0.01 * 1:100)
> > points(0 - 0.01 * 1:100, 1 + 0.01 * 1:100)
> > points(1 + 0.01 * 1:100, 0 - 0.01 * 1:100)
> > points(1 + 0.01 * 1:100, 1 + 0.01 * 1:100)
> > par(c("omd", "fig", "plt", "usr"))
> >
> > The resulting plot shows that the corners of the are approximately
> > 0.05 user coordinate units from the boundaries of the plot region.
> > According to par, though, there is a margin around the plotting region
> > that is clearly not symmetric and does not correspond to around 0.05
> > units.
> >
> > If we use pairs(iris[1:2]) and repeat the rest, the corners are now
> > 0.02 user coordinate units.  par provides the same information as
> > before.
> >
> > So:
> > 1. How do I figure out where coordinates I give to points will display
> > on the figure?
> > 2. More generally (for my own understanding), why does the par
> > information not do what I expect?  Do I have some fundamental
> > misunderstanding of the arrangement of plotting, figure, display, and
> > margin regions within the device?  Is there a bug in pairs and/or par?
> >
> > I'm using R 2.5.1, and this behavior occurs on a fresh R console.
> >
> > Thanks!
> >
> > Oliver
> >
> >
> >
>
>


-- 
Oliver Soong
Donald Bren School of Environmental Science & Management
University of California, Santa Barbara
Santa Barbara, CA 93106-5131
805-893-7044 (office)
610-291-9706 (cell)



[Rd] pairs, par
Oliver Soong