Dear useRs, I have a question regarding panel functions in the lattice package, in particular how to customize the plotting colors in xyplot. I have longitudinal data from several treatments (TRT) with subjects (SUBJ) nested in treatment. Each subject has several time points; the time points are nearly balanced across subjects, although not completely. At each sample (SAMP) at each time point (TIME), two replicates (REP) are taken. Let's call the response Y and the whole data.frame DAT. My goal is to make a trellis plot with each treatment in its own panel, each subject having its own color and lines connecting the REPs within SAMP (after adding jitter along the TIME axis to distinguish SUBJs). Let me switch over to an explicit example with artificial data. set.seed(695442223) DAT <- data.frame(TRT=factor(rep(c("Trt1","Trt2"), each=12)), # 2 treatments SUBJ=factor(paste('subj', rep(seq(4), each=6), sep='')), # 4 subjects, 2 w/in each TRT SAMP=factor(rep(seq(12), each=2)), # 4x3 = 12 samples REP=factor(c(1,2)), # 2 replicates TIME=rep(c(4,4,8,8,12,12), times=4), # 3 arbitrary times Y=round(rep(rgamma(n=12, shape=47500, scale=1/500), each=2) + rep(rgamma(n=12, shape=4, scale=1/8), each=2) * c(-1,1), 2) # arbitrary Y but very easy to view ) DAT <- transform(DAT, # horizontal jitter plotX=TIME+ifelse(SUBJ %in% c("subj1","subj3"), -1,1)/10, # unique plotting color for each subject COLS=factor(c( "green", "black", "blue", "red"))[as.numeric(SUBJ)] ) The canonical example is: xyplot(Y ~ plotX | TRT, data = DAT, groups = SAMP, type="b") Of course, this connects the REPs within SAMP, since SAMP is the "groups" variable. But each SAMP is now independently colored, recycled from (if I understand correctly) trellis.par.get('superpose.<symbol/line>')$col, instead of each SUBJ being independently colored from the COLS variable. In Section 5.2 in Deepayan Sarkar's "Lattice: Multivariate Data Visualization with R" (Springer 2008), the suggestion in Section 5.2 is to use a panel function which gets passed an explicit "subscripts" argument, to distinguish the groups indexing from the color indexing. Starting with the book's code to plot Figure 5.4, I hacked around to get this: xyplot(Y ~ plotX | TRT, data = DAT, groups = SAMP, type="b", # the full vector of colors cols = DAT[['COLS']], panel = function(x, y, ..., cols, groups, subscripts) { colSUBJ <- cols[subscripts] panel.xyplot(x, y, groups=groups, subscripts=subscripts, ..., col.line=colSUBJ, col.symbol=colSUBJ) } ) Now this gets each treatment TRT with its own color, but not each subject SUBJ. I am indeed not exactly sure what this code does specifically, with the subscripts argument. But nearly every other permutation of arguments I could think off either gave a totally wrong plot, or an error. How do I write a panel function to join reps in the same sample with the groups argument, but give each subject a unique color? (an alternate chore is to use only unique colors within each treatment, or repeating colors in different treatments). And what is a good pointer or two to good resources explaining the use of the subscripts argument in panel functions? Sarkar's book is fantastic but its treatment of this issue is quite thin. Thanks, John Szumiloski John Szumiloski, Ph.D. Principal Scientist, Statistician Analytical and Bioanalytical Development NBR105-1-1411 Bristol-Myers Squibb P.O. Box 191 1 Squibb Drive New Brunswick, NJ 08903-0191 (732) 227-7167 ________________________________ This message (including any attachments) may contain co...{{dropped:8}}