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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel