[R] Override col.lines and col.symbol in panel.xyplot with type='b'

Szumiloski, John john_szumiloski at merck.com
Tue Apr 12 20:40:32 CEST 2011

Thanks Deepayan. I've been burnt before trying base graphics idioms in lattice graphics, so never even thought to try that.  Although I am not sure I would have figured out the row vs. group distinction without diving deeply into the source.

Apologies for my obtuseness; I have however learned quite a bit with both my own tinkerings and this advice.  Thanks again.  -John

-----Original Message-----
From: Deepayan Sarkar [mailto:deepayan.sarkar at gmail.com] 
Sent: Tuesday, 12 April, 2011 3:31 AM
To: Szumiloski, John
Cc: r-help at r-project.org
Subject: Re: [R] Override col.lines and col.symbol in panel.xyplot with type='b'

On Mon, Apr 11, 2011 at 9:27 PM, Szumiloski, John <john_szumiloski at merck.com> wrote:
> Dear useRs,
> I have a longitudinal experiment with several treatment groups, ~20 subjects per group, ~6 timepoints and a continuous dependent variable.  I have been successfully been using lattice::xyplot with this data.  However, I have been stumped with a particular application of it.
> I would like to use xyplot on my data, broken into treatment groups with the groups argument, using type='b' to show subjectwise longitudinal data.  So far so good, I have done this many times.  But now I wish to show the same data but having the color of the lines and symbols overridden in some arbitrary way, yet not without changing anything else about the plot, in particular the structure/topology of the plot from using the groups argument and type='b'.
> This requires using a panel function of some sort.

No, it does not. You are making things unnecessarily complicated.

When you use 'groups', colors are associated with levels of the grouping variable, not individual rows of your data. So:

dat <- data.frame(Panel=rep(c('A','B'), each=4),
                  ID=factor(rep(letters[1:4], each=2)),
                  X=rep(c(0,1), times=4),

##### now for the arbitrary colors.  Let's highlight one subject red, the rest black

myColor <- ifelse(levels(dat$ID) == "a", 2, 1)

xyplot(Y ~ X | Panel, data=dat, groups=ID,
       type='b', col = myColor,

Notice:  This e-mail message, together with any attachme...{{dropped:11}}

More information about the R-help mailing list