# [R] lattice and several groups

Gabor Grothendieck ggrothendieck at gmail.com
Thu Aug 31 03:44:22 CEST 2006

```To handle conditioning on survey we provide a panel function
that subsets col and pch:

# define test data - df

# 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))
)

draw.key(key1, draw = TRUE, vp = viewport(.9, .9))
draw.key(key2, draw = TRUE, vp = viewport(.75, .9))

On 8/30/06, Laurent Rhelp <laurentRhelp at free.fr> 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 <ggrothendieck at gmail.com> 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 <laurentRhelp at free.fr> 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 at stat.math.ethz.ch mailing list
> >>>https://stat.ethz.ch/mailman/listinfo/r-help
> >>>and provide commented, minimal, self-contained, reproducible code.
> >>>
> >>>
> >>>
> >
> >______________________________________________
> >R-help at stat.math.ethz.ch mailing list
> >https://stat.ethz.ch/mailman/listinfo/r-help
> >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) !
>
>
>

```