[R] Adding per-panel text to panel strips in lattice xyplot

Deepayan Sarkar deepayan.sarkar at gmail.com
Tue Oct 17 22:36:58 CEST 2006


On 10/17/06, Frank E Harrell Jr <f.harrell at vanderbilt.edu> wrote:
> Deepayan Sarkar wrote:
> > On 10/13/06, Frank E Harrell Jr <f.harrell at vanderbilt.edu> wrote:
> >> I would like to add auxiliary information to the bottom of two strips on
> >> each panel that comes from a table look-up using the values of two
> >> variables that define the panel.  For example I might panel on sex and
> >> race, showing 3 randomly chosen time series in each panel and want to
> >> add (n=100) in the bottom strip to indicate the 3 curves were sampled
> >> from 100.  Is there a not-too-hard way to do that?
> >>
> >> I would like to do this both with and without groups= and superposition,
> >> but especially with.
> >
> > There might be, but it might be easier with some changes to lattice.
> > Can you give a minimal example so that we can try out ideas?
> >
> > Deepayan
> >
>
> Thanks for your note Deepayan.  The difficulty is that the quantity to
> add may need to be obtained by a table look-up given current panel strip
> values.  I have gotten around this by duplicating the lookup values
> (here sizecluster) to correspond to x and y then using subscripts.  The
> code snippet below does not put the extra value in a strip but right
> under the bottom strip.  Better would be inside the bottom strip.
>
>      textfun <- function(subscripts) {
>        if(!length(subscripts)) return()
>        size <- sizecluster[subscripts[1]]
>        txt <- paste('N=',size,sep='')
>        grid.text(txt, x=.005, y=.99, just=c(0,1),
>                  gp=gpar(fontsize=9, col=gray(.25)))
>      }
>
> xyplot(Y ~ X | distribution*cluster, groups=curve,
>                   xlab=xlab, ylab=ylab,
>                   xlim=xlim, ylim=ylim,
>                   as.table=TRUE,
>   panel=function(x, y, subscripts, ...) {
>          panel.superpose(x, y, subscripts, ...)
>          textfun(subscripts)
>        })

Well, the strip function has always been passed an argument called
'which.panel' (and the latest lattice has a function called
'which.packet()' which gives the same information inside a panel
function as well). It seems to me that that's the thing you want to
use. E.g.

> library(lattice)
> dotplot(variety ~ yield | site * year, data = barley,
+     strip = function(..., which.panel) print(which.panel))
[1] 1 1
[1] 1 1
[1] 2 1
...
[1] 5 2
[1] 6 2
[1] 6 2

-Deepayan



More information about the R-help mailing list