Re: [R] There must be a better way to do this

2012-05-10 Thread Jim Lemon

On 05/10/2012 02:17 AM, David Perlman wrote:

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!

That's a rather nice way of illustrating what happened. I can see the 
trends in the bumpcharts on the bottom.


Jim

__
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.


Re: [R] There must be a better way to do this

2012-05-09 Thread Jim Lemon

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

__
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.


Re: [R] There must be a better way to do this

2012-05-09 Thread David Perlman
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.


[R] There must be a better way to do this

2012-05-08 Thread David Perlman
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.


Thanks very much in advance for any help!


-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.