Apparently the fix was simpler than I anticipated (at least for Prof. Ripley).
Thanks for finding and implementing this improvement. -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.s...@imail.org 801.408.8111 > -----Original Message----- > From: Prof Brian Ripley [mailto:rip...@stats.ox.ac.uk] > Sent: Thursday, February 05, 2009 6:42 AM > To: Greg Snow > Cc: Jim Lemon; r-devel@r-project.org > Subject: Re: [R] Is abline misbehaving? > > [Moved to R-devel, where it probably should have started and it is > getting to C-level functions now.] > > abline is not 'misbehaving' (don't be rude about the work of > volunteers who are in your audience), but behaving in the same way as > other graphics calls. > > The real story is this (and R is Open Source, so you can read the code > too). > > Most base graphics functions call GClip to set the graphics clip state > before drawing). GClip only does anything if the xpd state has > changed since the last time it was used, and in the case of a plot > like this with axes which were drawn in the margins, it has done so. > Now, the tricky bit is 'was used', which can be very hard to > determine. Just setting the par is not enough: it has to be 'used'. > > What I have done in R-devel is make clip() 'use' xpd, and that will > ensure that the clip region it sets persists until xpd is next > changed. There the example works as I believe you intended. > > > On Sat, 24 Jan 2009, Greg Snow wrote: > > > This is a known issue, the documentation of clip talks about some > plotting functions resetting the clipping region and some don't. > abline is apparently one of those that plots first, then resets the > clipping region (so the first time it doesn't acknowledge it, but does > afterwards). The function clipplot in the TeachingDemos package uses a > similar kludge to what you do below (and I guess that puts my standing > in the hall of fame at even higher risk than yours) except that it uses > the box function with a transparent box to reset the clipping region, > which means that you get strange boxes if your graphics device does not > handle transparency. It was a question like yours that I asked in > order to try to eliminate the kludge from clipplot that originally lead > to the clip function being added, and it does cover the initial cases > that I asked about. > > > > In order to change things to work like we would like (always > resetting the clipping region at the appropriate place so that clip > always does what we expect) will probably require going through every > basic command that could put something into the plot and figure out > exactly when to have them reset the clipping region (which may not be a > simple decision, doing it too early may break existing code). The > amount of tedious work required for not much return places this fairly > low on the priority list, especially when there is a work around (as > you have found), even if it feels like a bit of a kludge. > > > > So while this probably does not fix your problem, at least hopefully > this helps you understand a bit more of what is happening here, and at > least you know that you are not alone in hall of kludge infamy. > > > > -- > > Gregory (Greg) L. Snow Ph.D. > > Statistical Data Center > > Intermountain Healthcare > > greg.s...@imail.org > > 801.408.8111 > > > > > >> -----Original Message----- > >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r- > >> project.org] On Behalf Of Jim Lemon > >> Sent: Saturday, January 24, 2009 2:51 AM > >> To: r-h...@r-project.org > >> Subject: [R] Is abline misbehaving? > >> > >> Hi experts, > >> I was graciously offered a function to enhance abline by restricting > >> the > >> extent of the line to less than the plotting region. This seems a > >> useful > >> idea, and it looked like the easiest way to program it was to set up > a > >> clipping region with "clip", draw the abline and then restore the > >> previous clipping region. Let us call this function ablineclip. > After > >> quite a bit of testing, I have found that the first call to > ablineclip > >> ignores the clipping region. It's not that simple. Successive calls > to > >> ablineclip respect the clipping region, even if it changes. I can > >> reproduce the behavior like this: > >> > >> plot(-3:3,-3:3) > >> clip(-2,2,-2,2) > >> abline(v=0) > >> clip(-2,2,-2,2) > >> abline(h=0) > >> > >> > >> The first abline ignores the clip, the second respects it. I have > >> programmed around this, with the pathetic kludge of calling "abline" > >> with a line outside the plotting area, calling "clip" a second time, > >> and > >> then calling "abline" with the line that was requested. While this > >> works, my place in programming history will be ineradicably > compromised > >> if the Programmers' Hall of Fame ever finds out. Any suggestions? > >> > >> R-2.7.2 > >> FC9 Linux > >> > >> Jim > >> > >> ______________________________________________ > >> r-h...@r-project.org mailing list > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide http://www.R-project.org/posting- > >> guide.html > >> and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > > r-h...@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > > and provide commented, minimal, self-contained, reproducible code. > > > > -- > Brian D. Ripley, rip...@stats.ox.ac.uk > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel