[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