On Apr 8, 2012, at 7:24 PM, John Maindonald wrote:
> 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))
Thanks for that John, but I think you missed my point. The lines I was
adding were supposed to only be an example of how to put in single
median value. The task with which I felt I had failed was to plot six
separate medians, .... two different ones in each panel. I was
basically throwing up my hands in dealing with the formula interface
and suggesting going to a "hand-crafted approach. I assumed that
wcheckle would drop the panel.segments call and individually stick in
the median values, perhaps using a for-loop.
--
David
>
> 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: [email protected]
> 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, [email protected] wrote:
>
>> From: David Winsemius <[email protected]>
>> Subject: Re: [R] Drawing a line in xyplot
>> Date: 8 April 2012 2:17:22 PM AEST
>> To: wcheckle <[email protected]>
>> Cc: [email protected]
>>
>>
>>
>> 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
>
David Winsemius, MD
West Hartford, CT
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.