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
>>> wasn’t 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.

Reply via email to