[R] Assigning line colors in xyplot

Deepayan Sarkar deepayan.sarkar at gmail.com
Sat Sep 1 00:32:32 CEST 2007


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