[R] Location of grobs etc on lattice output

John Maindonald john.maindonald at anu.edu.au
Sun Nov 21 23:35:02 CET 2004


I'm puzzled about side effects of trellis.unfocus():

The following runs without problem, though grid.text() does not
seem to do anything.  (I'd thought that I had it working at one point.)

     library(DAAG); library(lattice); library(grid)
     cuckoos.strip <- stripplot(species ~ length, xlab="", data=cuckoos)
     cuckoos.bw <- bwplot(species~length, xlab="Length of egg (mm)",
                          data=cuckoos)
     vp0 <- viewport(layout=grid.layout(2, 1))
     pushViewport(vp0)
     vp1 <- viewport(layout.pos.row=1)
     vp2 <- viewport(layout.pos.row=2)
     pushViewport(vp1)
     print(cuckoos.strip,newpage=FALSE)
#   trellis.focus("panel", row=1, column=1, clip.off=TRUE)
     grid.text("A", x=unit(0,"native"), y=unit(1.05,"native"),
               gp=gpar(fontsize=9))
#   trellis.unfocus()  ## & remove the following upViewport()
     upViewport()
     pushViewport(vp2)
     print(cuckoos.bw, newpage=FALSE)
     trellis.focus("panel", row=1, column=1, clip.off=TRUE)
     grid.text("B", x=unit(0,"native"), y=unit(1.05,"native"),
               gp=gpar(fontsize=9))
     trellis.unfocus()

If I remove the #'s, and remove the upViewport() that
follows the second #, I seem to lose the current tree,
as though the newpage=FALSE for the next print()
is ignored.  Should I be able to do something like this?
Clearly I do not understand what happens when
trellis.focus() is invoked.

This seems an area where an effective GUI, with a
graphical display of the viewport tree, could be very
helpful.

John Maindonald             email: john.maindonald at anu.edu.au
phone : +61 2 (6125)3473    fax  : +61 2(6125)5549
Centre for Bioinformation Science, Room 1194,
John Dedman Mathematical Sciences Building (Building 27)
Australian National University, Canberra ACT 0200.


On 21 Nov 2004, at 3:41 PM, Deepayan Sarkar wrote:

> On Saturday 20 November 2004 19:41, John Maindonald wrote:
>> Is there any way, after use of print.trellis(), to obtain the
>> co-ordinates of the plot region, e.g., in what are then the
>> native co-ordinates?
>
> Have you read help(trellis.focus)? This is new in 2.0.0 and the
> recommended API for interacting with lattice plots (you can of course
> use grid tools directly, but details are more likely to change at that
> level).
>
> It hasn't had much testing, so I would appreciate reports of things 
> that
> should be doable easily but isn't.
>
>> e.g.
>>   library(DAAG)
>>   library(lattice); library(grid)
>>   data(cuckoos)
>>   pushViewport(viewport(layout=grid.layout(2, 1)))
>>   pushViewport(viewport(layout.pos.row=1))
>>   cuckoos.strip <- stripplot(species ~ length, data=cuckoos)
>>   print(cuckoos.strip, newpage=FALSE)
>>   grid.text("A", x=unit(0.18,"native"), y=unit(0.925,"native"))
>>    # This works, but is fiddly, and needs rejigging if width
>>    # or fontsize are changed.
>>   popViewport(1)
>>
>> An alternative would of course be to access the co-ordinate
>> system used by the lattice function for locating the panels,
>> or for locating labelling.
>>
>> As in the example above, I have been using grid.text() to
>> position text outside the plot region, but closer to the "top"
>> axis than the legend parameter to the lattice function will
>> allow.
>
> trellis.focus("panel", row=1, column=1, clip.off=TRUE)
>
> will put you in the plot region (panel), but will switch off clipping 
> so
> you can write text outside.
>
> You can also now control the amount of space between the axis and
> legend, see
>
> str(trellis.par.get("layout.heights"))
>
> Deepayan
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html




More information about the R-help mailing list