[R] Assigning line colors in xyplot

Christof Bigler christof.bigler at env.ethz.ch
Sun Sep 2 20:57:22 CEST 2007


Thanks to Deepayan and Hadley for their help, both solutions work,  
not only for the example below, but also for my "real" data set that  
I'm about to analyze.

Christof


On 01.09.2007, at 00:32, Deepayan Sarkar wrote:
> On 8/31/07, Christof Bigler <christof.bigler at env.ethz.ch> wrote:
>> The suggestions by Deepayan Sarkar and Hadley Wickham work for that
>> case, but I get into troubles when I try to draw e.g. a panel for "A"
>> and "B":
>>
>> xyplot(y ~ x | f , groups=g, data=tmp,type="l",
>>       par.settings=list(superpose.line=list(col=c("red","blue"))),
>>       auto.key=list(space="top",
>> text=levels(tmp$f),points=FALSE,lines=TRUE))
>>
>> Similarly for xyplot(y ~ x | f , groups=f, ...)
>>
>>
>> Let's assume that we use a slightly more complex dataframe, where we
>> have different individuals a, ..., f (grouping variable "h") with  
>> 1 or 2
>> series of measurements per individual (grouping variable "g"). The
>> individuals are grouped as "A" or "B" (grouping variable "f")  
>> according
>> to the distribution of the values in the variable "y".
>>
>> set.seed(1)
>> tmp2 <- data.frame(
>>
>> y=c(rnorm(10,0,1),rnorm(10,4,2),rnorm(10,4,2),rnorm(10,4,2),rnorm 
>> (10,0,1),rnorm(10,0,1),rnorm(10,0,1),rnorm(10,4,2),rnorm(10,0,1)),
>>       x=1:10,
>>
>> f=c(rep("A",10),rep("B",10),rep("B",10),rep("B",10),rep("A",10),rep 
>> ("A",10),rep("A",10),rep("B",10),rep("A",10)),
>>
>> g=c(rep("1",10),rep("2",10),rep("3",10),rep("4",10),rep("5",10),rep 
>> ("6",10),rep("7",10),rep("8",10),rep("9",10)),
>>
>> h=c(rep("a",10),rep("b",10),rep("b",10),rep("c",10),rep("d",10),rep 
>> ("d",10),rep("e",10),rep("f",10),rep("e",10)))
>>
>> Again, the line colors in the following plot are correct:
>>
>> xyplot(y ~ x | g , groups=f, data=tmp2,type="l",
>>       par.settings=list(superpose.line=list(col=c("red","blue"))),
>>       auto.key=list(space="top", points=FALSE,lines=TRUE))
>>
>> But, if I want to show e.g. one panel per individual, the  
>> assignment of
>> the colors is not correct:
>>
>> xyplot(y ~ x | h , groups=g,
>> data=tmp2,type="l",
>>
>> par.settings=list(superpose.line=list(col=c("red","blue"))),
>>
>>       auto.key=list(space="top", text=levels(tmp2$f),
>> points=FALSE,lines=TRUE))
>>
>>
>> Any suggestions?
>
> This works (only the 'groups' argument is different from your call):
>
> xyplot(y ~ x | h , groups=interaction(f, g),
> data=tmp2,type="l",
>
> par.settings=list(superpose.line=list(col=c("red","blue"))),
>
>      auto.key=list(space="top", text=levels(tmp2$f),
> points=FALSE,lines=TRUE))
>
>
> Note that unlike ggplot, you cannot (easily) use a different variable
> for grouping and coloring. Fortunately, the levels of interaction(f,
> g) are such that your colors (red, blue) are repeated in the right
> order, so you don't need to do much extra work.
>
> -Deepayan



More information about the R-help mailing list