[R] trajectory plot (growth curve)

Kingsford Jones kingsfordjones at gmail.com
Tue Aug 24 01:19:47 CEST 2010


Hi Lei,

Hope you don't mind I'm moving this back to the list in case others
may benefit.  Answers below...

On Mon, Aug 23, 2010 at 3:37 PM, Lei Liu <liulei at virginia.edu> wrote:
> Hi Kingsford,
>
> Thanks a lot! I got some help from my colleague by using the following code:
>
>  xyplot(y~month,group=id, type="l"), the same as you suggested. It worked
> fine.
>
> However, when I tried to add an additional line for the mean at each time
> point by the following code:
>
>  y.mean=aggregate(y, by=list(time), FUN=mean)[, 2]
>  uniq.time=sort(unique(time))
>
>  lines(uniq.time, y.mean, type="l", lty=1, lw=2)
>
> I find the line of mean does not overlap well with the trajectory plot!!! It
> seems to me that "lines" statement does work well under "xyplot"! I tried
> different strategies, e.g., add xlim and ylim in both xyplot and lines
> statements, but still the problem exists. I also tried the ggplot2 package
> and it had the same problem. Any help here? Thanks!

Both lattice and ggplot2 use grid graphics which is a different beast
from the base graphics.  I don't believe the lines function has
methods to add to grid plots.  There are many approaches you could
take here.  The first thing that comes to my mind is to add another
subjects (named 'mean' below) whose values are the observed average
within time points:

#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'))


best,

Kingsford Jones



More information about the R-help mailing list