Doris
2010-Jun-02 14:46 UTC
[R] lattice, xyplot, using "panel.segments" by just addressing one panel
Hi R experts, I'm using the xyplot function in lattice to draw a multipanel plot consiting of 5x6 scatterplots. Now I need to link single points in each of those scatterplots (=panel),but the points, that need linking are different for each panel. I tried to use the panel.segments function for that, but I can't address each panel separately. Links right for panel 1, show up in all other panels, too. Tried functions like [panel.number()], but didn't work. Would be so great, if somebody could help me with that! That's the code, I used: library(lattice) library(latticeExtra) #[...] attach(mydata) attach(links) #containing the coordinates for the segments fx, fy, tx, ty fx <- fx fy <- fy tx <- tx ty <- ty xyplot(LogN~LogM|factor(surber), par.settings = list(strip.background = list(col = "transparent")), xlab = "Log M", ylab = "Log N", layout = c(6,5), aspect = 1, as.table = TRUE, strip=FALSE, panel=function(x,y){ panel.xyplot(x,y,pch=20,col="black", bg="transparent") panel.fill(col = "transparent") panel.segments(fx,fy,tx,ty[panel.number()]) }) Also tried to split the data and loop it (but this code might be a bit messy. Apologies!) sn is the variable used to split according to panel. I just tried to do the links for 2 panel here: fx <- split(links$fx,links$sn) fy <- split(links$fy,links$sn) tx <- split(links$tx,links$sn) ty <- split(links$ty,links$sn) sn <- sn dothese <- c(1,2) ct <- 0 for (i in dothese){ ct <- ct + 1 x1 <- fx[[i]] y1 <- fy[[i]] x2 <- tx[[i]] y2 <- ty[[i]] } xyplot(LogN~LogM|factor(surber), par.settings = list(strip.background = list(col = "transparent")), xlab = "Log M", ylab = "Log N", layout = c(6,5), aspect = 1, as.table = TRUE, strip=FALSE, panel=function(x,y){ panel.xyplot(x,y,pch=20,col="black", bg="transparent") panel.fill(col = "transparent") panel.segments (x1,y1,x2,y2 [panel.number(1,2)]) }) Thanks, Doris -- View this message in context: http://r.789695.n4.nabble.com/lattice-xyplot-using-panel-segments-by-just-addressing-one-panel-tp2240248p2240248.html Sent from the R help mailing list archive at Nabble.com.
Peter Ehlers
2010-Jun-02 15:28 UTC
[R] lattice, xyplot, using "panel.segments" by just addressing one panel
Doris, You might get lucky and find some kind soul who's willing to dig through your *un*reproducible code, but your chances for help would probably increase dramatically if you were to provide *reproducible* and *minimal* code to illustrate your problem. I imagine that you might benefit from reading the posting guide. It may be that trellis.focus() solves your problem. -Peter Ehlers On 2010-06-02 8:46, Doris wrote:> > Hi R experts, > > I'm using the xyplot function in lattice to draw a multipanel plot consiting > of 5x6 scatterplots. > Now I need to link single points in each of those scatterplots (=panel),but > the points, that need linking are different for each panel. > I tried to use the panel.segments function for that, but I can't address > each panel separately. Links right for panel 1, show up in all other panels, > too. Tried functions like [panel.number()], but didn't work. > > Would be so great, if somebody could help me with that! > > That's the code, I used: > > library(lattice) > library(latticeExtra) > #[...] > attach(mydata) > attach(links) #containing the coordinates for the segments fx, fy, tx, ty > > fx<- fx > fy<- fy > tx<- tx > ty<- ty > > xyplot(LogN~LogM|factor(surber), > par.settings = list(strip.background = list(col = "transparent")), > xlab = "Log M", ylab = "Log N", > layout = c(6,5), aspect = 1, as.table = TRUE, strip=FALSE, > panel=function(x,y){ > panel.xyplot(x,y,pch=20,col="black", bg="transparent") > panel.fill(col = "transparent") > panel.segments(fx,fy,tx,ty[panel.number()]) > > }) > > > Also tried to split the data and loop it (but this code might be a bit > messy. Apologies!) sn is the variable used to split according to panel. I > just tried to do the links for 2 panel here: > > fx<- split(links$fx,links$sn) > fy<- split(links$fy,links$sn) > tx<- split(links$tx,links$sn) > ty<- split(links$ty,links$sn) > sn<- sn > dothese<- c(1,2) > ct<- 0 > for (i in dothese){ > ct<- ct + 1 > x1<- fx[[i]] > y1<- fy[[i]] > x2<- tx[[i]] > y2<- ty[[i]] > } > > > xyplot(LogN~LogM|factor(surber), > par.settings = list(strip.background = list(col = "transparent")), > xlab = "Log M", ylab = "Log N", > layout = c(6,5), aspect = 1, as.table = TRUE, strip=FALSE, > panel=function(x,y){ > panel.xyplot(x,y,pch=20,col="black", bg="transparent") > panel.fill(col = "transparent") > panel.segments (x1,y1,x2,y2 [panel.number(1,2)]) > > }) > > > > Thanks, Doris