>But I don't want to plot random colors. >... > That's why I have this vector with length 24 - each one matches one line in > the "npk" dataset. ... which is not what interaction.plot, or matplot, needs; it needs one per line on the plot.
>How can I inform to the interaction.plot function the color >corresponding to the block it will plot? You need a colour vector the same length as the number of levels you're plotting. One easy way to do that would be to do something like col=1:nlevels(fac), for example as in interaction.plot(npk$N, npk$block, fit, xlab="N", ylab="yield",col=1:nlevels(fac)) If you have several levels that correspond to the same level of a third factor, you need to provide a cross-reference of sorts. In your toy example, fac corresponds to three levels of block, so one could specify manually. One way of doing it in code, though, could be to use table to identify levels of fac corresponding to levels of block. That sounds a bit complicated, but let's see: npk$fac <- fac #just so it's in the same data frame fac.by.block <- with(npk, table(fac, block)) #cross-reference fac levels by block fac.index.by.block.level <- apply(fac.by.block, 2, function(x) which(x>0)[1]) #Assumes that you want the first nonzero table entry and that numerical indices are OK # you could also use which directly: which(fac.by.block >1, arr.ind=TRUE)[,1] gives the same result IF there's a 1:1 fac:block matching Then interaction.plot(npk$N, npk$block, fit, xlab="N", ylab="yield",col=(1:nlevels(fac))[fac.index.by.block.level]) ... which I think is something like what you;re after? S ******************************************************************* This email and any attachments are confidential. Any use...{{dropped:8}} ______________________________________________ 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.