Thanks, that is very helpful. I agree that my example plot was a bit cluttered, but this is what I actually wanted: http://brainimaging.waisman.wisc.edu/~perlman/data/MNPT1T2_h_unp_raw.pdf I just needed to get example code out quickly. You get better help when you have a self-contained demo of the question. :)
I have replaced my old horrible code with the nice concise segments code. Thanks! On May 9, 2012, at 3:55 AM, Jim Lemon wrote: > On 05/09/2012 03:59 AM, David Perlman wrote: >> I made this rather cool plot which I am quite pleased with: >> http://brainimaging.waisman.wisc.edu/~perlman/data/BeeswarmLinesDemo.pdf >> >> However, I feel there must be a better way to do it than what I did. I'm >> attaching the code to create it, which downloads the data by http so it >> should run for you if you have the current version of beeswarm installed >> (which was just updated today, incidentally). It might also work with a >> non-current version of beeswarm. >> >> The problem is that I jumped through all kinds of hoops to: >> >> a) get the subject numbers for each point associated with the point xy >> coordinates output by beeswarm. The order of the points is not the same as >> the order in the input file; they are shuffled in a way that I think depends >> on the input formula. The trick I used (ok, I hope you're sitting down when >> you read this) is to run beeswarm a second time with pwcol=Subj, so then the >> "col" column of the output becomes the subject numbers. I know, horrible. >> But I don't know how else to do it. I feel like there is probably some >> logic to the way the cases were reordered by the formula, but I don't know >> how to work with that. >> >> b) get the lines() function to pair the xy coordinates properly. I did this >> by reshaping the whole thing into wide format, with separate columns for x.1 >> y.1 x.2 y.2, and then add a third pair of columns x.3 y.3 which is all NA, >> and then reshaping it back into long format. Then the lines() function >> automatically does the right thing, but I feel like that was a horrible hack >> and there must be a smarter way to do it. >> >> > Hi Dave, > This plot looks like the offspring of a boxplot, a beeswarm plot and a > bumpchart after a heavy night on the grog. Beauty is in the eye of the > beholder, I guess. > > Let's see, first you plot the boxplots, then the beeswarm on the centerlines > of the boxplots, then you want to add the lines. Okay, try this: > > paindat<-data.frame( > HEP1=sample(1:20,30,TRUE, > prob=c(seq(0,0.1,length.out=10),seq(0.1,0,length.out=10))), > HEP2=sample(1:20,30,TRUE, > prob=c(seq(0,0.1,length.out=10),seq(0.1,0,length.out=10))), > MBSR1=sample(1:20,30,TRUE, > prob=c(seq(0,0.1,length.out=10),seq(0.1,0,length.out=10))), > MBSR2=sample(1:20,30,TRUE, > prob=c(seq(0,0.1,length.out=10),seq(0.1,0,length.out=10))), > Wait1=sample(1:20,30,TRUE, > prob=c(seq(0,0.1,length.out=10),seq(0.1,0,length.out=10))), > Wait2=sample(1:20,30,TRUE, > prob=c(seq(0,0.1,length.out=10),seq(0.1,0,length.out=10)))) > boxplot(paindat,ylim=c(0,20), > col=c("pink","pink","lightgreen","lightgreen","lightblue","lightblue")) > require(beeswarm) > bsinfo<-beeswarm(tangledat,add=TRUE) > segments(bsinfo$x[bsinfo$x.orig=="HEP1"],bsinfo$y[bsinfo$x.orig=="HEP1"], > bsinfo$x[bsinfo$x.orig=="HEP2"],bsinfo$y[bsinfo$x.orig=="HEP2"]) > segments(bsinfo$x[bsinfo$x.orig=="MBSR1"],bsinfo$y[bsinfo$x.orig=="MBSR1"], > bsinfo$x[bsinfo$x.orig=="MBSR2"],bsinfo$y[bsinfo$x.orig=="MBSR2"]) > segments(bsinfo$x[bsinfo$x.orig=="Wait1"],bsinfo$y[bsinfo$x.orig=="Wait1"], > bsinfo$x[bsinfo$x.orig=="Wait2"],bsinfo$y[bsinfo$x.orig=="Wait2"]) > > and let me say right here that the beeswarm function is a crackerjack piece > of work. > > Jim -dave---------------------------------------------------------------------- A neuroscientist is at the video arcade, when someone makes him a $1000 bet on Pac-Man. He smiles, gets out his screwdriver and takes apart the Pac-Man game. Everyone says "What are you doing?" The neuroscientist says "Well, since we all know that Pac-Man is based on electric signals traveling through these circuits, obviously I can understand it better than the other guy by going straight to the source!" ______________________________________________ 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.