PS: The following shows possibilities that are available using latticeExtra layering:
## Best make type and attend factors xdat = data.frame(mortality =c(5, 8,7,5,8,10,11,6,4,5,20,25,27,30,35,32,28,21,20,34,11,15,18,12,15,12,10,15,19,20), type= factor(c(1, 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)), attend = factor(c(1, 0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0))) gph <- xyplot (mortality ~ attend|type, pch=16, data = xdat, aspect=2:1,layout=c(3,1)) one4all <- layer(avy <- median(xdat$mortality), panel.segments(0.1, avy, 0.3, avy, col="red",lwd=4), panel.segments(0.7, avy, 1, avy, col="red",lwd=4)) medbytype <- layer(avy <- median(y), panel.segments(0.1, avy, 0.3, avy, col="red",lwd=4), panel.segments(0.7, avy, 1, avy, col="red",lwd=4)) interact <- layer(panel.average(x, y, fun=median, col='red', lwd=4)) Compare gph + one4all (shows overall median lines in all 3 panels) gph + medbytype (shows separate median lines for the separate panels) gph+interact (gives a form of interaction plot) NB x (if its values are used) and y are local to the individual panel NB also that layer() accepts a data argument. The following is an alternative way to calculate one4all: one4all <- layer(data=xdat, avy <- median(mortality), panel.segments(0.1, avy, 0.3, avy, col="red",lwd=4), panel.segments(0.7, avy, 1, avy, col="red", lwd=4)) John Maindonald. > This can be simplified by using the layering abilities that Felix Andrews > made available in latticeExtra. These are too little known. These pretty > much make it unnecessary to resort to trellis.focus(), at least in such > cases as this. These layering abilities are too little known: > > library(latticeExtra) > x11(height=8,width=11) > xdat = data.frame(mortality =c(5, > 8,7,5,8,10,11,6,4,5,20,25,27,30,35,32,28,21,20,34,11,15,18,12,15,12,10,15,19,20), > type= > c(1, 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3), attend = > c(1, 0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,0)) > gph <- xyplot ( mortality ~ attend|type, > panel=function(x,y) > { > panel.grid(lty=5) > panel.xyplot(x,y,pch=16,jitter.x=TRUE,col=1) > for(i in 1:3) > { > panel.segments(x0=c(0.7, 1.7), > x1=c(1.3, 2.3), > y0=with(xdat, c(tapply(mortality[type==i], attend[type==i], median))), > y1=with(xdat, c(tapply(mortality[type==i], attend[type==i], > median))),col="red",lwd=4) > } > }, > data = xdat, aspect=2:1,layout=c(3,1)) > > ## Now create a layer object that will add the further segments. > addlayer <- layer(panel.segments(x0=1,y0=20,x1=1.2, y1=20), > panel.segments(x0=2,y0=30,x1=2.2, y1=30)) > > gph+addlayer > > The code that produces the object gph would also be simpler > and easier to follow if some relevant part was separated out into > a separate layer. > > See also my notices on layering of lattice objects at: > http://www.maths.anu.edu.au/%7Ejohnm/r-book/add-graphics.html > > John Maindonald email: john.maindon...@anu.edu.au > phone : +61 2 (6125)3473 fax : +61 2(6125)5549 > Centre for Mathematics & Its Applications, Room 1194, > John Dedman Mathematical Sciences Building (Building 27) > Australian National University, Canberra ACT 0200. > http://www.maths.anu.edu.au/~johnm > > On 08/04/2012, at 8:00 PM, r-help-requ...@r-project.org wrote: > >> From: David Winsemius <dwinsem...@comcast.net> >> Subject: Re: [R] Drawing a line in xyplot >> Date: 8 April 2012 2:17:22 PM AEST >> To: wcheckle <wchec...@jhsph.edu> >> Cc: r-help@r-project.org >> >> >> >> On Apr 7, 2012, at 10:29 PM, wcheckle wrote: >> >>> Thank you David, the bwplot option does what I need: >>> >>> x11(height=8,width=11) >>> bwplot ( mortality~ attend|type, >>> pch=95,cex=5,col=2, >>> par.settings=list( >>> box.rectangle = list(col = "transparent"), >>> box.umbrella = list(col = "transparent"), >>> plot.symbol = list(col = "transparent") >>> ), >>> panel=function(x,y,...){ >>> panel.grid(lty=5) >>> panel.xyplot(x,y,pch=16,jitter.x=TRUE,col=1) >>> panel.bwplot(x,y,...) >>> }, >>> data = x,aspect=2:1,layout=c(3,1)) >>> >>> >>> However, I am interested in also learning how to do it in xyplot as well. I >>> wasnt able to follow the last two set of instructions (condition on >>> packet.number and loop over segments), wondering if I can ask for your help >>> for the correct code (my attempt resulted in all three mean lines within >>> each panel): >>> >>> x11(height=8,width=11) >>> xyplot ( mortality ~ attend|type, >>> panel=function(x,y) >>> { >>> panel.grid(lty=5) >>> panel.xyplot(x,y,pch=16,jitter.x=TRUE,col=1) >>> for(i in 1:3) >>> { >>> panel.segments(x0=c(0.7, 1.7), >>> x1=c(1.3, 2.3), >>> y0=c(tapply(x$mortality[x$type==i], x$attend[x$type==i], median)), >>> y1=c(tapply(x$mortality[x$type==i], x$attend[x$type==i], >>> median)),col="red",lwd=4) >>> } >>> }, >>> data = x,aspect=2:1,layout=c(3,1)) >>> >>> thank you again. I also found your info on data.frame useful. >> >> I haven't figured out how to do it with the interaction of 'attend' and >> ''type' from inside xyplot. I'm thinking I might be able to succeed using >> trellis.focus() to address separate "columns" within a particular panel. >> >> This will draw segments at (1,20) and (2,30) without resorting to low level >> grid/viewport stuff. >> >> trellis.unfocus(); trellis.focus("panel", 1, 1) >> do.call("panel.segments", list(x0=1,y0=20,x1=1.2, y1=20)) >> trellis.unfocus() >> trellis.unfocus(); trellis.focus("panel", 1, 1) >> do.call("panel.segments", list(x0=2,y0=30,x1=2.2, y1=30)) >> trellis.unfocus() >> >> -- >> David >> >> >> David Winsemius, MD >> West Hartford, CT John Maindonald email: john.maindon...@anu.edu.au phone : +61 2 (6125)3473 fax : +61 2(6125)5549 Centre for Mathematics & Its Applications, Room 1194, John Dedman Mathematical Sciences Building (Building 27) Australian National University, Canberra ACT 0200. http://www.maths.anu.edu.au/~johnm [[alternative HTML version deleted]]
______________________________________________ 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.