On Fri, Oct 30, 2009 at 8:33 PM, Ottorino-Luca Pantani <ottorino-luca.pant...@unifi.it> wrote: > Dear R users, > this is a follow up of this message > http://tolstoy.newcastle.edu.au/R/e6/help/09/05/13897.html > I'm reproducing the core of it for convenience. > >> // >> / data(Oats, package = "MEMSS") / >> / tp1.oats <- xyplot(yield ~ nitro | Variety + Block, / >> / data = Oats, / >> / panel = function(x, y, subscripts, ...) { / >> / # How to normalize my heatmap metric with >> / >> / # the value of the panel that has maximum >> average ? / >> / # metric = eval(mean(y)/ >> max(<mean-of-each-panel>))))) / >> / metric = eval(mean(y)/max(Oats$yield)) / >> / panel.fill(col = gray(metric)) / >> / panel.lines(x,y) / >> / } / >> / ) / >> / print(tp1.oats) / >> // >> >> xyplot(yield ~ nitro | Variety + Block, >> >> data = Oats, >> max.mean = max(with(Oats, tapply(yield, list(Variety, Block), >> mean))), >> panel = function(x, y, subscripts, max.mean, ...) { >> metric = mean(y)/max.mean >> panel.fill(col = gray(metric)) >> panel.lines(x,y) >> }) >> >> >> or >> >> xyplot(yield ~ nitro | Variety + Block, >> >> data = Oats, >> aux.env = new.env(parent = emptyenv()), >> prepanel = function(x, y, aux.env, ...) { >> aux.env$max.mean.y <- max(aux.env$max.mean.y, mean(y)) >> list() >> }, >> panel = function(x, y, subscripts, aux.env, ...) { >> metric = mean(y) / aux.env$max.mean.y >> panel.fill(col = gray(metric)) >> panel.lines(x,y) >> }) >> >> -Deepayan > > The result is a trellis object in which the background colour of the panels > is an outcome of the data contained in the panel itself. After all, this is > what "panel = function (x,y ....." is meant for, right ? > > But what, if I want to highlight some panels ? Arbitrarily or conditioned by > another variable. > > Say I want to shade in gray only the upper right panels (Block VI, Victory > and Marvellous varieties )
See ?which.packet, which will tell you the current levels of the conditioning variables. So something like panel = function(x, y, subscripts, aux.env, ...) { wp <- which.packet() if (levels(Oats$Variety)[wp[1]] %in% c("Victory", "Marvellous") || ...) panel.fill(col = gray(metric)) panel.lines(x,y) }) -Deepayan > > Given a data frame like this, with a variable intended to set the colour of > the panel background > / > data(Oats, package = "MEMSS") > /Oats1 <- cbind.data.frame(Oats, > Highlight = > ifelse(Oats$Block == "VI" & > Oats$Variety %in% c("Victory", > "Marvellous" ), > "gray", > "transparent") > ) > > which is a possible code ? > > I (more or less) know how to manage the data in the panel, > but I cannot imagine how to do it with variables external to the panel > itself. > > I suppose that the panel functions are not useful here. > I'm wandering through par.settings, themes and panel.fill, but still without > success. > Any hint ? > > -- > Ottorino-Luca Pantani, Università di Firenze > Dip. Scienza del Suolo e Nutrizione della Pianta > P.zle Cascine 28 50144 Firenze Italia > Ubuntu 8.04.3 LTS -- GNU Emacs 23.0.60.1 (x86_64-pc-linux-gnu, GTK+ Version > 2.12.9) > ESS version 5.5 -- R 2.9.2 > > ______________________________________________ > R-help@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-help@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.