[R] lattice: superposed boxplots with same colors for rectanglesand umbrellas and filled boxes

Richard M. Heiberger rmh at temple.edu
Mon Dec 9 23:52:38 CET 2013


Gerrit,

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
>
> ---------------------------------------------------------------------
> Dr. Gerrit Eichner                   Mathematical Institute, Room 212
> gerrit.eichner at math.uni-giessen.de   Justus-Liebig-University Giessen
> Tel: +49-(0)641-99-32104          Arndtstr. 2, 35392 Giessen, Germany
> Fax: +49-(0)641-99-32109        http://www.uni-giessen.de/cms/eichner
>
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list