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

From: Deepayan Sarkar <deepayan.sarkar_at_gmail.com>
Date: Tue 17 Oct 2006 - 20:36:58 GMT

On 10/17/06, Frank E Harrell Jr <f.harrell@vanderbilt.edu> wrote:
> Deepayan Sarkar wrote:
> > On 10/13/06, Frank E Harrell Jr <f.harrell@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



R-help@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 and provide commented, minimal, self-contained, reproducible code. Received on Wed Oct 18 06:41:33 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 17 Oct 2006 - 21:30:10 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.