On 2012-03-26 09:09, Sebastián Daza wrote:
Thank you Peter. The problem with you solution is that it doesn't
represent the actual values of disruption. Look this example:
person<- rep(1:2, each=4)
income<- c(100, 120, 150, 200, 90, 100,120, 150)
disruption<- c(0,0,0,1,0,1,1,0)
time<- rep(c(1:4),2)
dat<- as.data.frame(cbind(person,time, income, disruption))
mycols<- c(2, 5)
library(lattice)
xyplot(income~time|as.factor(person),data=dat,
type=c("p","g","o"), col.line="black", col.symbol =
mycols[dat$disruption+1],
xlab="Time",
ylab="Familiar Income")
I am looking for a way to get the colors of dots according to actual
disruption values, and at the same time to draw the lines between all
dots for each person. Thank you!
Okay, my approach was too simple and dependent on the particular
disruption sequence you first gave.
What you actually need is a panel-specific 'disruption' vector giving
the colours. That can be done with 'subscripts' (which pick out the
values of disruption that apply to a given panel):
xyplot(income~time|as.factor(person),data=dat
, type=c("b","g")
, panel = function(..., subscripts){
panel.xyplot(...,
col.symbol =
mycols[dat$disruption[subscripts] + 1])})
BTW, your method of creating the data frame is unnecessarily complex.
It would suffice to use
dat <- data.frame(person, time, .... etc)
Peter Ehlers
Hi everyone,
I am just trying to figure out how to do a xyplot where in addition to
dots and lines I can change dots' colors according to an individual
variable (e.g., marital disruption across time, a dummy 0/1). When I
use "groups" specification (see below), I get two different lines for
each individual based on groups, and what I want is to get one line
connecting dots, and different dots' colors according to marital
disruption.
Any ideas about how to do that?
person<- rep(1:2, each=4)
income<- c(100, 120, 150, 200, 90, 100,120, 150)
disruption<- rep(c(0,1), 4)
time<- rep(c(1:4),2)
dat<- as.data.frame(cbind(person,time, income, disruption))
library(lattice)
xyplot(income~time|as.factor(person),data=dat,
type=c("p","g","o"), col.line="black",
xlab="Time",
ylab="Familiar Income")
# I just want to change dots' colors according to disruption, not to
get two different lines:
xyplot(income~time|as.factor(person),data=dat,
type=c("p","g","o"), col.line="black", groups=disruption,
xlab="Time",
ylab="Familiar Income")
If I understand correctly what you're after, try adding the
'col.symbol' argument instead of the 'groups' argument.
col.symbol = disruption + 1
or, better, for arbitrary colours:
mycols<- c(2, 5)
xyplot(....,
col.symbol = mycols[disruption + 1],
....)
Peter Ehlers
Thank you in advance!
--
Sebastián Daza
______________________________________________
R-help@r-project.org 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.