[R] Lattice: How to color the data points in splom() according to the panel they are plotted?
Deepayan Sarkar
deepayan.sarkar at gmail.com
Mon Jun 14 16:34:38 CEST 2010
On Mon, Jun 14, 2010 at 6:24 PM, Martin Maechler
<maechler at stat.math.ethz.ch> wrote:
> Dear Deepayan,
>
> this is in reply to a message almost 6 months ago :
>
>>>>>> Deepayan Sarkar <deepayan.sarkar at gmail.com>
[...]
> > Thanks, I was going to say the same thing, except that it would be
> (1)
> > conceptually simpler just to add the 'i' and 'j' values as arguments
> > to the "panel" function (the 'pargs' variable). The colors could then
> > be passed through as part of the ... arguments, and the relevant entry
> > extracted in the panel function.
> (2)
> > The other option is to keep a global counter and increment it inside
> > the panel function, and choosing colors based on that counter and
> > knowledge of the order in which panels are drawn. Not very elegant,
> > but the least intrusive solution I can think of.
>
> > -Deepayan
>
> Against the R-forge version of lattice,
> the following very small patch to panel.pairs
> would allow users to use '(1)' i.e., provide panel functions
> with (i,j) arguments directly.
> I'm pretty sure that the change could not easily break existing
> splom() usage.
>
> --- R/splom.R (revision 619)
> +++ R/splom.R (working copy)
> @@ -291,7 +291,8 @@
> y = z[subscripts, i]),
> ## panel.number = panel.number,
> ## packet.number = packet.number),
> - list(...))
> + list(...),
> + list(i = i, j = j))
> else
> c(list(x = z[subscripts, j],
> y = z[subscripts, i],
> @@ -299,7 +300,8 @@
> subscripts = subscripts),
> ## panel.number = panel.number,
> ## packet.number = packet.number),
> - list(...))
> + list(...),
> + list(i = i, j = j))
>
> if (!("..." %in% names(formals(panel))))
> pargs <- pargs[intersect(names(pargs), names(formals(panel)))]
Done in r-forge svn.
-Deepayan
>
>
> With the above change,
> a user could use a panel function with (i,j) arguments,
> and e.g. say
>
> Cmat <- outer(1:6,1:6,
> function(i,j) rainbow(11, start=.12, end=.5)[i+j-1])
>
> splom(~diag(6), ## for testing: superpanel=mypanel.pairs,
> panel=function(x,y,i,j,...){
> panel.fill(Cmat[i,j]); panel.splom(x,y,...)
> panel.text(.5,.5, paste("(",i,",",j,")",sep=""))
> })
>
>
> I think that would allow quite a bit more flexibility without
> the need to explicitly "hack" panel.pairs
> (and having to maintain such a hack against the ever-enhancing
> lattice).
>
> Martin Maechler, ETH Zurich
>
More information about the R-help
mailing list