Cory Champagne
2011-Feb-22 19:52 UTC
[R] how can I connect paired points within lattice bwplot?
Hello all, my first post to this list. I do a lot of experiments using a paired sampling design and I would get a lot of mileage out of figures like this, if I can make it work! Any advice would be appreciated. my email is: cory.champagn at gmail.com. Thanks! #define dummy variables and a dataframe: y1 <- c(1:20) x1 <- c("A","A","A","A","A","A","A","A","A","A", "B","B","B","B","B","B","B","B","B","B") x2 <- c("pre","pre","pre","pre","pre", "post","post","post","post","post","pre","pre","pre","pre","pre","post","post","post","post","post") data <- data.frame(y1, x1, x2) #I'm using the following code to make simple boxplots and it works pretty well for me: with(data, { boxplot(y1~x1) points(y1~x1) #adds the raw data points for(i in 1:10) { # five individuals in the experiment. lines(1:2, c(y1[i], y1[i+10])) } #adds lines connecting the paired points, as long as they're ordered correclty anyway. }) #end boxplot code here. ##Now, I'd like to do the same thing in lattice with multiple factors: library("lattice") dev.new() with(data, { bwplot(y1~x1|x2, #make this boxplot with two factors: A & B, and "pre" & "post". panel=function(...) { panel.bwplot(...) panel.points(..., pch=16) #up to here- this works well. #panel.lines #how do I make this work to add lines to the plot? }) }) #I hope this is reasonably clear; I'm trying to add lines connecting the paired points in the lattice bwplot. Any input would be appreciated. If anyone's really gung-ho, I'd additionally like to use a separate dataframe for the panel.lines function than the panel.points call uses; to connect only specific points of interest (but maybe I'm getting over my head!) #thanks! really appreciate any input. -- Cory Champagne, M.Sc. Long Marine Lab, UC Santa Cruz office: 831.459.3112 email: cory.champagn at gmail.com
Peter Ehlers
2011-Feb-23 02:31 UTC
[R] how can I connect paired points within lattice bwplot?
On 2011-02-22 11:52, Cory Champagne wrote:> Hello all, > my first post to this list. I do a lot of experiments using a paired > sampling design and I would get a lot of mileage out of figures like > this, if I can make it work! Any advice would be appreciated. > my email is: cory.champagn at gmail.com. > Thanks! > > > #define dummy variables and a dataframe: > y1<- c(1:20) > x1<- c("A","A","A","A","A","A","A","A","A","A", > "B","B","B","B","B","B","B","B","B","B") > x2<- c("pre","pre","pre","pre","pre", > "post","post","post","post","post","pre","pre","pre","pre","pre","post","post","post","post","post") > data<- data.frame(y1, x1, x2) > > > #I'm using the following code to make simple boxplots and it works > pretty well for me: > with(data, { > boxplot(y1~x1) > points(y1~x1) #adds the raw data points > for(i in 1:10) { # five individuals in the experiment. > lines(1:2, c(y1[i], y1[i+10])) } #adds lines connecting the paired > points, as long as they're ordered correclty anyway. > }) #end boxplot code here. > > ##Now, I'd like to do the same thing in lattice with multiple factors: > library("lattice") > dev.new() > with(data, { > bwplot(y1~x1|x2, #make this boxplot with two factors: A& B, and "pre" > & "post". > panel=function(...) { > panel.bwplot(...) > panel.points(..., pch=16) #up to here- this works well. > #panel.lines #how do I make this work to add lines to the plot? > }) > })See if this works for you: [I've changed your 'data' to 'dat' and you don't need the with()] bwplot(y1 ~ x1 | x2, data = dat, panel=function(x, y, ...) { panel.bwplot(x, y, ...) panel.points(x, y, ..., pch=16, col=2) for(i in 1:5) panel.lines(1:2, c(y[i], y[i+5]), ...) }) Peter Ehlers> > #I hope this is reasonably clear; I'm trying to add lines connecting the > paired points in the lattice bwplot. Any input would be appreciated. > If anyone's really gung-ho, I'd additionally like to use a separate > dataframe for the panel.lines function than the panel.points call uses; > to connect only specific points of interest (but maybe I'm getting over > my head!) > #thanks! really appreciate any input. >