To handle conditioning on survey we provide a panel function that subsets col and pch:
# define test data - df # note that your val2 and val3 lines had a syntax # so we have commented them out and # replaced them as shown. n <- 18 x1 <- seq(1,n) val1 <- -2*x1+50 # val2 <- (-2*(x1-8)2)+100 val2 <- (-2*(x1-8))+100 # val3 <- (-2*(x1-8)2)+50 val3 <- (-2*(x1-8))+50 y <- c(val1,val2,val3) x <- rep(x1,3) f1 <- rep(c("mod1","mod2","mod3"),each=n/3) f1 <- rep(f1,3) f2 <- rep(c("g1","g2","g3"),each=n) df <- data.frame(x=x,y=y,f1=f1,f2=f2) surveys <- factor(c(rep("survey1",n*3),rep("survey2",n*3),rep("survey3",n*3))) df <- rbind(df,df,df) df <- data.frame(df,surveys=surveys) # create xyplot library(lattice) library(grid) pnl <- function(x, y, groups, subscripts, col, pch, ...) panel.xyplot(x, y, col = col[subscripts], pch = pch[subscripts], ...) xyplot(y ~ x | surveys, data = df, col = as.numeric(df$f1), pch = as.numeric(df$f2), panel = pnl) key1 <- list(border = TRUE, colums = 2, text = list(levels(df$f1)), points = list(pch = 1:nlevels(df$f1)) ) key2 <- list(border = TRUE, colums = 2, text = list(levels(df$f2)), points = list(pch = 20, col = 1:nlevels(df$f2)) ) # add legend draw.key(key1, draw = TRUE, vp = viewport(.9, .9)) draw.key(key2, draw = TRUE, vp = viewport(.75, .9)) On 8/30/06, Laurent Rhelp <[EMAIL PROTECTED]> wrote: > Gabor Grothendieck a écrit : > > >Note that before entering this you need: > > > >library(lattice) > >library(grid) # to access the viewport function > > > >On 8/29/06, Gabor Grothendieck <[EMAIL PROTECTED]> wrote: > > > > > >>Try this: > >> > >>xyplot(val ~ x, data = df, type = "p", > >> col = as.numeric(df$f1), pch = as.numeric(df$f2)) > >> > >>key1 <- list(border = TRUE, colums = 2, text = list(levels(df$f1)), > >> points = list(pch = 1:nlevels(df$f1)) > >>) > >> > >>key2 <- list(border = TRUE, colums = 2, text = list(levels(df$f2)), > >> points = list(pch = 20, col = 1:nlevels(df$f2)) > >>) > >> > >>trellis.focus("panel", 1, 1) > >>draw.key(key1, draw = TRUE, vp = viewport(.9, .9)) > >>draw.key(key2, draw = TRUE, vp = viewport(.75, .9)) > >>trellis.unfocus() > >> > >> > >>On 8/29/06, Laurent Rhelp <[EMAIL PROTECTED]> wrote: > >> > >> > >>>Dear R-list, > >>> > >>> I would like to use the lattice library to show several groups on > >>>the same graph. Here's my example : > >>> > >>>## the data > >>>f1 <- factor(c("mod1","mod2","mod3"),levels=c("mod1","mod2","mod3")) > >>>f1 <- rep(f1,3) > >>>f2 <- factor(rep(c("g1","g2","g3"),each=3),levels=c("g1","g2","g3")) > >>>df <- data.frame(val=c(4,3,2,5,4,3,6,5,4), x=rep(c(1,2,3),3),f1=f1,f2=f2) > >>>############################################################# > >>>library(lattice) > >>> > >>>para.liste <- trellis.par.get() > >>>superpose.symbol <- para.liste$superpose.symbol > >>>superpose.symbol$pch <- c(1,2,3) > >>>trellis.par.set("superpose.symbol",superpose.symbol) > >>> > >>># Now I can see the group according to the f1 factor (with a different > >>>symbol for every modality) > >>>xyplot( val~x, > >>> data=df, > >>> group=f1, > >>> auto.key=list(space="right") > >>> ) > >>> > >>># or I can see the group according to the f2 factor > >>>xyplot( val~x, > >>> data=df, > >>> type="l", > >>> group=f2, > >>> auto.key=list(space="right",points=FALSE,lines=TRUE) > >>> ) > >>> > >>>How can I do to highlight both the f1 and f2 factors on one panel with > >>>the legends, using the lattice function ? > >>> > >>>Thanks > >>> > >>>______________________________________________ > >>>R-help@stat.math.ethz.ch 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@stat.math.ethz.ch 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. > > > > > > > > > Thank you, Gabor. The way to put the two legends is very interesting. > For the graphs, in fact, my problem is to fit the data for every level > of the f2 factor, showing the levels of the f1 factor in each panel and > that for several surveys . Here's an example closer to my actual data : > > ## the data > > n <- 18 > x1 <- seq(1,n) > val1 <- -2*x1+50 > val2 <- (-2*(x1-8)2)+100 > val3 <- (-2*(x1-8)2)+50 > y <- c(val1,val2,val3) > x <- rep(x1,3) > f1 <- rep(c("mod1","mod2","mod3"),each=n/3) > f1 <- rep(f1,3) > f2 <- rep(c("g1","g2","g3"),each=n) > df <- data.frame(x=x,y=y,f1=f1,f2=f2) > > surveys <- > factor(c(rep("survey1",n*3),rep("survey2",n*3),rep("survey3",n*3))) > df <- rbind(df,df,df) > df <- data.frame(df,surveys=surveys) > ####################################################################### > library(lattice) > > para.liste <- trellis.par.get() > superpose.symbol <- para.liste$superpose.symbol > superpose.symbol$pch <- c(1,2,3) > trellis.par.set("superpose.symbol",superpose.symbol) > > xyplot( y~x | surveys, data=df, > group=f1, > auto.key=list(space="right") > ) > > xyplot( y~x | surveys , > data=df, > type="l", > group=f2, > auto.key=list(space="right",points=FALSE,lines=TRUE) > ) > > Certainly, I have to use the panel function but I don't know how to mark > the f1 factor in each panel (I want to fit the values according to the > f2 factor) ! > > > ______________________________________________ R-help@stat.math.ethz.ch 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.