[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