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.maindonald@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-request@r-project.org wrote:

> From: David Winsemius <dwinsemius@comcast.net>
> Subject: Re: [R] Drawing a line in xyplot
> Date: 8 April 2012 2:17:22 PM AEST
> To: wcheckle <wcheckle@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


	[[alternative HTML version deleted]]

