Consider the following situation: we have quantified algal concentrations for a variety of species using many samples at each of three years. It seems to make sense to generate a line plot (matplot-like), with each species plotted as a separate line, with the points connected to emphasize the temporal pattern.
The problem: lots of overlapping error bars. The question: from both a procedural and an aesthetic point of view, what do people recommend? Below is an example that hacks (not quite "jitters", because it's systematic) the x locations a bit, but I find it a bit ugly. (I was also hoping that ggplot had some magic to do this automatically, but position_dodge doesn't seem to work in this context ...) Ben Bolker library(ggplot2) nx <- 3 ngrp <- 5 nper <- 4 x <- rep(1:nx,ngrp*nper) y <- runif(nx*ngrp*nper) g <- factor(rep(1:ngrp,each=nx*nper)) dat <- data.frame(x,y,g) se <- with(dat,tapply(y,list(g,x),sd)/table(g,x)) means <- with(dat,tapply(y,list(g,x),mean)) limits <- aes(ymax=means+se,ymin=means-se) gg <- factor(rep(1:ngrp,nx)) xx <- rep(1:nx,each=ngrp) p <- ggplot(dat,aes(y=c(means),x=xx, group=gg,colour=gg)) p + geom_pointrange(aes(ymin=c(means-se),ymax=c(means+se))) xdodge <- xx + rep(seq(-0.1,0.1,length=ngrp),nx) p + geom_line() + geom_pointrange(aes(x=xdodge, ymin=c(means-se), ymax=c(means+se))) + scale_x_continuous(name="Year",breaks=1:3) + scale_y_continuous(name="Whatever") -- Ben Bolker Associate professor, Biology Dep't, Univ. of Florida bol...@ufl.edu / www.zoology.ufl.edu/bolker GPG key: www.zoology.ufl.edu/bolker/benbolker-publickey.asc ______________________________________________ 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.