[R] lattice and several groups

Laurent Rhelp laurentRhelp at free.fr
Thu Aug 31 00:05:04 CEST 2006


Gabor Grothendieck a écrit :

> 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
>> 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 !



More information about the R-help mailing list