Re: [Rd] pairs, par

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Mon, 29 Oct 2007 18:51:45 -0400

This hack will disable the on.exit temporarily:

pairs.data.frame <- function(x, ...) {

	on.exit <- function(...) {}
	environment(pairs.default) <- environment()
	pairs.default(x, ...)

}
pairs(iris)
par("usr")
# add points to lower right square
points(1:10/10, 1:10/10, col = "red")

On 10/29/07, Oliver Soong <osoong_at_bren.ucsb.edu> wrote:
> 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)
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 29 Oct 2007 - 22:55:21 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 30 Oct 2007 - 03:46:12 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.