From murdoch at stats.uwo.ca  Tue Jun 26 14:25:24 2007
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Tue, 26 Jun 2007 08:25:24 -0400
Subject: [Rd] boxplot and bxp do not respect xlim by default (PR#9754)
In-Reply-To: <20070626121653.8580448F56@slim.kubism.ku.dk>
References: <20070626121653.8580448F56@slim.kubism.ku.dk>
Message-ID: <468105B4.4090601@stats.uwo.ca>

On 6/26/2007 8:16 AM, s.ellison at lgc.co.uk wrote:
> Full_Name: Steve Ellison
> Version: 2.4.1
> OS: Windows, Linux
> Submission from: (NULL) (194.73.101.157)

That version is obsolete, but this problem is still present in R-devel. 
  I'll take a look.

Duncan Murdoch

> 
> 
> bxp() allows specifcation of box locations with at=, but neither adjusts xlim=
> to fit at nor does it respect xlim provided explicitly.
> 
> This is because bxp() now includes explicit xlim as c(0.5, n+0.5), without
> checking for explicitly supplied xlim (or ylim if horizontal).
> 
> This also prevents simple added plots (eg if add=T, with at=(1:n)+0.5, the last
> box is partly off the plot.
> 
> The 'offending' code is in bxp:
>     if (!add) {
>         plot.new()
>         if (horizontal) 
>             plot.window(ylim = c(0.5, n + 0.5), xlim = ylim, 
>                 log = log, xaxs = pars$yaxs)
>         else plot.window(xlim = c(0.5, n + 0.5), ylim = ylim, 
>             log = log, yaxs = pars$yaxs)
>     }
> 
> Suggested fix:
>    if (!add) {
>         plot.new()
> 	bxp.limits <- if(!is.null(at)) {
>               c(at[1]-(at[2]-at[1])/2, at[n]+(at[n]-at[n-1])/2 ) 
>            } else {
>               c(0.5, n + 0.5)
>            }
>         if (horizontal) 
>             plot.window(ylim = if(is.null(pars$xlim)) bxp.limits else
> pars$xlim,
>                       xlim = ylim, log = log, xaxs = pars$yaxs)
>         else plot.window(xlim = if(is.null(pars$xlim)) bxp.limits else
> pars$xlim, 
>                       ylim = ylim, log = log, yaxs = pars$yaxs)
>     }
> 
> 
> This retains the current defaults for xlim with at unspecified but allows
> explicit specification of xlim. (which is the grouping level axis whether
> horizontal or vertical).
> 
> I've tested the above as far as producing a modified bxp and plotting a boxplot
> object, but have not tried calling direct from boxplot. boxplot() should,
> however, not need modification as xlim and ylim are, I believe, passed via the
> namedargs list in the bxp call.
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] boxplot and bxp do not respect xlim by default (PR#9754)
Duncan Murdoch