On Mon, Aug 23, 2010 at 6:19 PM, Dennis Murphy <djmu...@gmail.com> wrote: > > This is an excellent idea - the only snag might occur if someone wants > the mean line to be thicker :)
fortunately, with your lattice solution this is easily accomplished by passing a vector to lwd: i <- c(1, 1, 1, 3) mykey <- list(space = 'right', title = 'ID', cex.title = 1.2, text = list(levels(dat$ID), cex = 0.8), lines = list(lty = i, lwd = i, col = 1:4)) xyplot(y ~ time, data = dat, lty = i, lwd = i, col.lines = 1:4, col = 1:4, groups = ID, type = c('g', 'p', 'l'), key = mykey) but I didn't have luck trying the same with qplot: > qplot(time, y, data = dat, group = ID, color = ID, + geom = c('point', 'line'), lty = i, lwd = i) Error in data.frame(colour = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, : arguments imply differing number of rows: 18, 4 perhaps using the construct ggplot(...) + geom_line(...) would be more fruitful? King > Having said that, it's usually easier to > 'fix' the > problem externally in the data rather than to fiddle with graphics commands. > >> >> #the original data (no replicates within time points) >> dat <- structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L), >> .Label = c("1", "2"), class = "factor"), >> time = c(1, 2, 3, 1.5, 4, 5.5, 6), >> y = c(1.4, 2, 2.5, 2.3, 4.5, 1.6, 2)), >> .Names = c("ID", "time", "y"), >> row.names = c(NA, -7L), class = "data.frame") >> >> #adding another subject to introduce replicates >> id3 <- data.frame(ID=as.factor(rep(3, 4)),time = c(1, 1.5, 2, 5.5), >> y = c(1, 2.2, 3, 2)) >> dat <- rbind(dat, id3) >> mean.y <- aggregate(formula = y ~ time, data = dat, FUN = mean) >> mean.y <- cbind(ID = as.factor('mean'), mean.y) >> dat <- rbind(dat, mean.y) >> dat >> library(ggplot2) >> qplot(time, y, data=dat, group = ID, color = ID, geom = c('point', >> 'line')) > > A lattice version with a legend is: > > mykey <- list(space = 'right', > title = 'ID', > cex.title = 1.2, > text = list(levels(dat$ID), cex = 0.8), > lines = list(lty = 1, col = 1:4)) > > xyplot(y ~ time, data = dat, lty = 1, col.lines = 1:4, col = 1:4, > groups = ID, type = c('g', 'p', 'l'), key = mykey) > > Defining the key externally modularizes the problem, lets one define > the features one wants to contain, and simplifies the high-level > xyplot() call. > > There is a type = 'a' (shorthand for panel.average()) that can be > used to good effect in xyplot(), but it creates 'holes' where missing > data reside, so taking care of the problem externally at the data > level is much cleaner. > > HTH, > Dennis > >> >> best, >> >> Kingsford Jones >> >> ______________________________________________ >> 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. > > ______________________________________________ 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.