[prev in list] [next in list] [prev in thread] [next in thread] 

List:       r-help
Subject:    Re: [R] Assigning line colors in xyplot
From:       "Deepayan Sarkar" <deepayan.sarkar () gmail ! com>
Date:       2007-08-31 22:32:32
Message-ID: eb555e660708311532n27c53f1dmf6bae720785d3f97 () mail ! gmail ! com
[Download RAW message or body]

On 8/31/07, Christof Bigler <christof.bigler@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

______________________________________________
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.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic