[Rd] boxplot() confuses x- and y-axes (PR#10345)

Jari Oksanen jarioksa at sun3.oulu.fi
Mon Oct 15 15:42:24 CEST 2007


On Mon, 2007-10-15 at 15:25 +0200, maechler at stat.math.ethz.ch wrote:
> >>>>> "ms" == marc schwartz <marc_schwartz at comcast.net>
> >>>>>     on Mon, 15 Oct 2007 14:20:16 +0200 (CEST) writes:
> 
>     ms> On Mon, 2007-10-15 at 10:30 +0200, bob.ohara at helsinki.fi wrote:
>     >> Full_Name: Bob O'Hara
>     >> Version: 2.6.0
>     >> OS: Windows XP
>     >> Submission from: (NULL) (88.112.20.250)
>     >> 
>     >> 
>     >> Using horizontal=TRUE with boxplot() confuses it as to what is an x- or y-axis. 
>     >> At least, xlim= and ylim= are the wrong way round, log="x" (or "y") and xaxt=
>     >> work as expected, I haven't looked at anything else.
>     >> 
>     >> Some code to see if you can reproduce the bug (or discover it's in my head...):
>     >> 
>     >> boxplot(count ~ spray, data = InsectSprays)
>     >> 
>     >> # Try to change x-axis:
>     >> boxplot(count ~ spray, data = InsectSprays, xlim=c(0,50))
>     >> 
>     >> # Plot horizontally:
>     >> boxplot(count ~ spray, data = InsectSprays, horizontal=TRUE)
>     >> 
>     >> # Now try to change x-axis:
>     >> boxplot(count ~ spray, data = InsectSprays, horizontal=TRUE, xlim=c(0,50))
>     >> # Changes y-axis!
>     >> 
>     >> # Now try to change y-axis:
>     >> boxplot(count ~ spray, data = InsectSprays, horizontal=TRUE, ylim=c(0,50))
>     >> # Changes x-axis!
>     >> 
>     >> # Plot x-axis on log scale:
>     >> boxplot(count+1 ~ spray, data = InsectSprays, horizontal=TRUE, log="x")
>     >> # Does indeed change x-axis
>     >> 
>     >> # Don't add ticks on x-axis:
>     >> boxplot(count ~ spray, data = InsectSprays, horizontal=TRUE, xaxt="n")
>     >> # Works as expected.
> 
>     ms> Hi Bob,
> 
>     ms> No, it's not in your head. This is documented in ?bxp, which is the
>     ms> function that actually does the plotting for boxplot(). See the
>     ms> description of 'pars' in ?bxp:
> 
>     ms> "Currently, yaxs and ylim are used ‘along the boxplot’, i.e.,
>     ms> vertically, when horizontal is false, and xlim horizontally."
> 
>     ms> So essentially, the named 'x' and 'y' axes are rotated 90 degrees when
>     ms> you use 'horizontal = TRUE', rather than the vertical axis always being
>     ms> 'y' and the horizontal axis always being 'x'. This has been discussed on
>     ms> the lists previously.
> 
> Yes; thank you, Marc.
> 
> And the reason for this is very sensible I think:
> 
> If you have a longish  boxplot()  or  bxp() command,
> and you just want to go from vertical to horizontal or vice
> versa, it makes most sense just to have to change the
> 'horizontal' flag and not having to see if there are other 'x*'
> and or 'y*' arguments that all need to be changed as well.
> 
Except that you must change xaxt/yaxt and log="x"/log="y" which do not
follow the "along the box" logic, and behave differently than
xlim/ylim. 

Nothing of this is fatal, but this probably needs more than one
iteration to find which way each of the x* and y* arguments works.

cheers, jari oksanen



More information about the R-devel mailing list