[R] trellis plot

Renaud Lancelot lancelot at sentoo.sn
Thu Nov 29 09:51:50 CET 2001


Hi Brad,

Here is a function adapted from panel.superpose (S+ version). Please
note the use of llines instead of lines (bottom of the code).

Hope this helps;

Renaud

panel.superpose.loess <- function(x, y, subscripts, groups,
   lwd = superpose.line$lwd, lty = superpose.line$lty, col = NULL,
   f=2/3, iter=3, delta = 0.1*diff(range(x)), ...){
  superpose.line   <- trellis.par.get("superpose.line")
  groups           <- as.numeric(as.factor(groups))[subscripts]
  max.groups       <- max(groups)
  lty  <- rep(lty,  length = max.groups)
  lwd  <- rep(lwd,  length = max.groups)
  if(is.null(col)) {
    sl  <- rep(superpose.line$col, length = max.groups)
    col <- numeric(max.groups)
    for(i in 1:max.groups) col[i] <- sl[i]}
  else col <- rep(col, length = max.groups)
  N <- seq(along = groups)
  for(i in sort(unique(groups))) {
    which <- N[groups == i] 
    j <- which  # no sorting
    llines(lowess(x[j], y[j], f = f, iter = iter, delta = delta),
          col = col[i], lwd = lwd[i], lty = lty[i], ...)
  }
}


library(lattice)
data(ethanol)

EE <- cut(ethanol$E, breaks = quantile(ethanol$E, prob = seq(0, 1,
1/3)), include.lowest = T)

trellis.device(bg = 0)
xyplot(NOx ~ C, groups = EE, data = ethanol,
  key = list(space = "right", title = "EE",
              text = list(levels(EE), cex = 1.2),
              lines = list(lty = c(1,2,4), pch = c(1, 8, 16), col = 1:3,
type = "b", cex = 1.1)),
  panel = function(x, y, ...) {
    panel.superpose(x, y, pch = c(1, 8, 16), col = 1:3, ...)
    panel.superpose.loess(x, y, lty = c(1,2,4), col = 1:3, ...)
    }
  )



Brad Buchsbaum wrote:
> 
> Hi,
> 
> I'd like to plot 4 groups of data using xyplot and panel.superpose so
> that the points are overlayed on a single plot.  For each group of data
> I'd also like a loess smoothed function (using panel.loess).  I have
> tried the following:
> 
> xyplot(series ~ time | gr, data=etable,
>          panel = function(x,y, ...) {
>            panel.superpose(x,y, ...)
>            panel.loess(x,y,span=.15)
> 
>            }
> )
> 
> However, this gives me only a single loess curve (collapsed across
> groups) whereas I would like one curve for each group (just as I get one
> color for each set of points from the panel.superpose).
> 
> Is there a way to accomplish this?
> 
> thanks,
> 
> Brad Buchsbaum
> 
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

-- 
Dr Renaud Lancelot, vétérinaire
CIRAD, Département Elevage et Médecine Vétérinaire (CIRAD-Emvt)
Programme Productions Animales
http://www.cirad.fr/presentation/programmes/prod-ani.shtml

ISRA-LNERV                      tel    (221) 832 49 02
BP 2057 Dakar-Hann              fax    (221) 821 18 79 (CIRAD)
Senegal                         e-mail renaud.lancelot at cirad.fr
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list