[R] Location of grobs etc on lattice output
Deepayan Sarkar
deepayan at stat.wisc.edu
Mon Nov 22 00:54:54 CET 2004
On Sunday 21 November 2004 16:35, John Maindonald wrote:
> 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))
I think you want "npc" rather than "native" here. x=0 on the native
scale is outside the device area.
> # 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 is a bug in trellis.unfocus, caused by my not reading grid
documentation carefully enough, I didn't notice that upViewport(0)
jumps to the root viewport instead of going up 0 viewports. I'll post
an update soon.
Quick fix:
assignInNamespace("trellis.unfocus", ns = "lattice",
value = function()
{
if (lattice:::lattice.getStatus("vp.highlighted"))
{
grid.remove("lvp.highlight", warn = FALSE)
lattice:::lattice.setStatus(vp.highlighted = FALSE)
}
lattice:::lattice.setStatus(current.focus.column = 0,
current.focus.row = 0)
if (lattice:::lattice.getStatus("vp.depth") > 0)
upViewport(lattice:::lattice.getStatus("vp.depth"))
lattice:::lattice.setStatus(vp.depth = 0)
invisible()
})
> This seems an area where an effective GUI, with a
> graphical display of the viewport tree, could be very
> helpful.
True, but it may be overkill for the amount of use it would get.
Deepayan
More information about the R-help
mailing list