[R] lattice: aligning independent graphs

Sebastian P. Luque spluque at gmail.com
Thu May 31 07:26:00 CEST 2007


On Sun, 27 May 2007 15:09:43 -0700,
"Deepayan Sarkar" <deepayan.sarkar at gmail.com> wrote:

[...]

> Better in what sense? You are trying to use lattice to do something that
> lattice isn't designed to do, so there is no solution that is "clean" in
> a philosophical sense. Ideally, you want something like grid, that
> allows you to control the layout in as much detail as you want (you can
> still use panel.xyplot, panel.grid, etc. as "panel functions" once you
> set up everything else). On the other hand, lattice gets you very close,
> and the only improvement I can think of is some sort of automated scheme
> to align the x labels to the respective columns. Here's one approach to
> do that (taking advantage of the fact that xlab can be an arbitrary
> "grob"):

[...]

I'm not yet savvy with grid, but if one were to do the same for y axis
labels, I thought the following modification to your code might do that:


---<---------------cut here---------------start-------------->---
myXlabGrob <-
    function(...) ## ...is lab1, lab2, etc
{
    ## you can add arguments to textGrob for more control
    ## in the next line
    labs <- lapply(list(...), textGrob, rot=90)
    nlabs <- length(labs)
    lab.heights <-
        lapply(labs,
               function(lab) unit(1, "grobheight", data=list(lab)))
    lab.layout <-
        grid.layout(ncol=1, nrow=nlabs,
                    heights=unit(1, "null"),
                    widths=do.call(max, lab.heights),
                    respect=TRUE)
    lab.gf <- frameGrob(layout=lab.layout)
    for (i in seq_len(nlabs))
        {
            lab.gf <- placeGrob(lab.gf, labs[[i]], row=i, col=1)
        }
    lab.gf
}


xyplot(1:9 ~ 1:9 | gl(3, 1, 9), layout=c(1, 3),
       ylab=myXlabGrob('Trial number', 'Subject number',
           'Experimental condition'), strip=FALSE)
---<---------------cut here---------------end---------------->---


which gives wrong width and placement.  How can this be modified so it
places the labels close to the axis annotation, centered on each panel?
Thanks in advance.



Cheers,

-- 
Seb



More information about the R-help mailing list