[R] Assigning line colors in xyplot

Christof Bigler christof.bigler at env.ethz.ch
Fri Aug 31 11:57:43 CEST 2007


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?

Christof

deepayan.sarkar at gmail.com wrote:
> On 8/30/07, Christof Bigler <christof.bigler at env.ethz.ch> wrote:
>   
>> Hi,
>>
>> I have a dataframe containing data from individuals 1, ..., 12 (grouping
>> variable "g" in the data frame below), which belong either to "A" or "B"
>> (grouping variable "f"):
>>
>> set.seed(1)
>>
>> tmp <- data.frame(
>>
>> y=c(rnorm(10,0,1),rnorm(10,4,2),rnorm(10,0,1),rnorm(10,4,2),rnorm(10,0,1),rnorm(10,4,2),rnorm(10,0,1),rnorm(10,4,2),rnorm(10,0,1),rnorm(10,4,2),rnorm(10,0,1),rnorm(10,4,2)),
>>       x=1:10,
>>
>> f=c(rep("A",10),rep("B",10),rep("A",10),rep("B",10),rep("A",10),rep("B",10),rep("A",10),rep("B",10),rep("A",10),rep("B",10),rep("A",10),rep("B",10)),
>>
>> g=c(rep("3",10),rep("2",10),rep("1",10),rep("4",10),rep("5",10),rep("6",10),rep("8",10),rep("7",10),rep("9",10),rep("11",10),rep("12",10),rep("10",10)))
>>
>>
>> I would like to draw line plots using the function xyplot:
>>
>> library(lattice)
>>
>> xyplot(y ~ x | g , 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))
>>
>> As it is, the colors are recycled alternately in the order the
>> individuals appear in the plot (1, 10, 11, 12, 2, ..., 9).
>>
>> How can I assign the red color to all individuals of group "A" and the
>> blue color to all individuals of group "B"?
>>     
>
> Why not simply use f as the grouping variable rather than g:
>
> xyplot(y ~ x | g , groups=f, data=tmp,type="l",
>       par.settings=list(superpose.line=list(col=c("red","blue"))),
>       auto.key=list(space="top", points=FALSE,lines=TRUE))
>
> ? Or am I missing something?
>
> -Deepayan
>



More information about the R-help mailing list