[R] lattice: superposed boxplots with same colors forrectanglesandumbrellas and filled boxes

Richard M. Heiberger rmh at temple.edu
Sun Feb 16 23:40:16 CET 2014


The next version of HH (3.0-3) is now out (at this instant source and
Windows are at cran.r-project.org, it will be everywhere in a day or
so).

The new function panel.bwplot.superpose does everything we have discussed
in this email thread, and a bit more.  See the
example(panel.bwplot.superpose) for details.

Rich

On Tue, Dec 10, 2013 at 6:25 AM, Gerrit Eichner
<Gerrit.Eichner at math.uni-giessen.de> wrote:
> Thank you very much, Rich, for the fast and very helpful reply! It helped me
> to reach my goal.
>
>  Regards -- Gerrit
>
> PS: I extended your solution to a version that allows slightly finer control
> over the components of the boxplots, in particular if one wants to combine
> it with, e.g., panel.stripplot() or panel.average(). It was also possible to
> simplify my call of bwplot() a bit. The code is certainly not perfect and
> fully tested, but does work (for me ;-)), and follows as a little 'thank
> you':
>
>
> panel.bwplot.constantColor <- function( ..., col, fill, cex, pch,
>                                         dot.pch, umbrella.lty, box.alpha) {
>  ## Date: Mon, 9 Dec 2013 17:52:38 -0500
>  ## From: Richard M. Heiberger <rmh at temple.edu>
>  ## Subject: Re: [R] lattice: superposed boxplots with same colors
>  ##          for rectangles and umbrellas and filled boxes
>
>
>  ## to be included in next version of the HH package
>  box.save <- list( box.dot = trellis.par.get( "box.dot"),
>                    box.rectangle = trellis.par.get( "box.rectangle"),
>                    box.umbrella = trellis.par.get( "box.umbrella"),
>                    plot.symbol = trellis.par.get( "plot.symbol"))
>  trellis.par.set( box.dot = list( col = col),
>                   box.rectangle = list( col = col, alpha = box.alpha),
>                   box.umbrella = list( col = col, lty = umbrella.lty,
>                                        alpha = box.alpha),
>                   plot.symbol = list( col = col))
>  panel.bwplot( ..., fill = col, cex = cex, pch = dot.pch)
>  trellis.par.set( box.save)
>  }
>
>
> bwplot( Y ~ F1, groups = F2, data = Data, jitter.data = TRUE,
>         col = c( "red", "blue"), box.alpha = 1/4,
>         dot.pch = 17, umbrella.lty = 1, do.out = FALSE,
>         panel = panel.superpose,
>         panel.groups = panel.bwplot.constantColor)
>
>
>
>
>
>> Thank you for the opportunity to illustrate this.  I solved this problem
>> last week and it will be included in the next version of the HH package
>> (about a month away).
>>
>> panel.bwplot.constantColor <- function(..., col, fill, cex, pch) {
>>  ## to be included in next version of the HH package
>>  box.save <- list(box.dot=trellis.par.get("box.dot"),
>>                   box.rectangle=trellis.par.get("box.rectangle"),
>>                   box.umbrella=trellis.par.get("box.umbrella"),
>>                   plot.symbol=trellis.par.get("plot.symbol"))
>>  trellis.par.set(box.dot=list(col=col),
>>                  box.rectangle=list(col=col),
>>                  box.umbrella=list(col=col),
>>                  plot.symbol=list(col=col))
>>  panel.bwplot(..., fill=col, cex=cex, pch=pch)
>>  trellis.par.set(box.save)
>> }
>>
>> bwplot( Y ~ F1, groups = F2, data = Data,
>>        col = mycolors, fill = mycolors, jitter.data = TRUE, pch=19,
>>        panel = panel.superpose,
>>        panel.groups = function(..., pch, col, alpha){
>>            panel.stripplot(...)
>>            panel.bwplot.constantColor(..., pch=pch, col=col,
>> alpha=alpha, do.out = FALSE)
>>        },
>>        par.settings = list( box.dot = list( alpha = myalpha),
>>                             box.rectangle = list( col = mycolors,
>>                                                   alpha = myalpha),
>>                             box.umbrella = list( col = mycolors,
>>                                                  alpha = myalpha))
>>        )
>>
>>
>> Rich
>>
>> On Mon, Dec 9, 2013 at 5:17 PM, Gerrit Eichner
>> <Gerrit.Eichner at math.uni-giessen.de> wrote:
>>>
>>> Dear R-list,
>>>
>>> I've been trying to produce a sort of an interaction plot wherein colored
>>> stripplots and boxplots are superposed. In particular, I want the colors
>>> of
>>> the (transparently) filled boxes to be the same as the colors of the box
>>> borders (rectangle) and their whiskers (umbrella). Below I'm going to
>>> create
>>> an artificial data set and provide the code with which I've come up so
>>> far,
>>> and which is a fusion and adaptation of a few pieces of code I've found
>>> in
>>> the help pages and the mail archives. It does almost what I want, but
>>> still
>>> colors the rectangles and the umbrellas in black (of course, because it
>>> is
>>> the setting in the example presented below). However, the latter is what
>>> I
>>> want to change.
>>>
>>> x <- c( rep( 1:4, each = 10), rep( -2, 40))
>>> Data <- data.frame( F1 = gl( 4, 10, length = 80, labels = LETTERS[ 1:4]),
>>>                     F2 = gl( 2, 40), Y = x + rnorm( length( x)))
>>>
>>> mycolors <- c( "red", "blue")
>>> myalpha <- 0.33
>>> bwplot( Y ~ F1, groups = F2, data = Data,
>>>         col = mycolors, fill = mycolors, jitter.data = TRUE,
>>>         panel = panel.superpose,
>>>         panel.groups = function(..., pch, col, alpha){
>>>             panel.stripplot(...)
>>>             panel.bwplot(..., do.out = FALSE)
>>>         },
>>>         par.settings = list( box.dot = list( alpha = myalpha),
>>>                              box.rectangle = list( col = "black",
>>>                                                    alpha = myalpha),
>>>                              box.umbrella = list( col = "black",
>>>                                                   alpha = myalpha))
>>>         )
>>>
>>>
>>> If I'd provide mycolors instead of "black" to the col-component of the
>>> (sub-)lists given to par.settings, the coloring of the respective
>>> components
>>> of the boxplots would not be what I want. Having studied the code of
>>> panel.superpose() and panel.bwplot() it appears to me that panel.bwplot()
>>> cannot access the settings created by panel.supperpose when it comes to
>>> drawing the rectangle and umbrella of a boxplot. It only accesses
>>> box.[dot,
>>> rectangle, umbrella], which does not give what I need.
>>>
>>> I may have overlooked the obvious and would be quite grateful if somebody
>>> could give me a hint where to look further. Or is a workaround necessary
>>> (and available)?
>>>
>>> Thanks a lot in advance!
>>>
>>>  Best Regards  --  Gerrit



More information about the R-help mailing list