Re: [R] using perm.cond & index.cond in lattice package

From: Deepayan Sarkar <deepayan_at_stat.wisc.edu>
Date: Tue 06 Jul 2004 - 04:02:57 EST

On Monday 05 July 2004 09:57, 8rino-Luca Pantani wrote:
> Dear R users,
> this is my first question to the list.
> I hope it will be not a trivial one.
>
> My problem is to change the order in which the panel are plotted in a
> lattice/Trellis plot.
> I've read the S-plus Trellis Graphics user manual, in which there is
> a function called "reorder.factor",

Hmm, I didn't know about this function, but it seems easy enough to define. In fact the groupedData() constructor in nlme does this, and that can be adapted to have

reorder.factor <- function(Factor, X, Function = mean, ...)

    ordered(Factor,

            levels = names(sort(tapply(X, Factor, Function, ...))))

which you may then use.

> that, as far as I can catch from ?xyplot, in the lattice package is
> substituted by two others:
> "index.cond" & "perm.cond"

[...]

> bwplot(Y~TREAT|LOCATION, data=mydframe)
> #The panels are plotted in alphabetical order, but I would rather
> have something like
> bwplot(Y~TREAT|OM, data=mydframe)
> # i.e. the panels ordered by OM (Organic Matter) content
> #but with LOCATION written in the strip.
> #From
> #str(bwplot(Y~TREAT|OM, data=mydframe))
> #I can see that
> # $ index.cond :List of 1
> # ..$ : int [1:4] 1 2 3 4
> # $ perm.cond : num 1
> #so I tried
> bwplot(Y~TREAT|LOCATION,
> data=mydframe,
> index.cond=
> list((1:4)[order(unique(mydframe$OM[order(mydframe$LOCATION)]))])
> )

You might as well just have

list(order(unique(mydframe$OM[order(mydframe$LOCATION)])))

> #and it seems to work, but without the darker tag for OM in the
> strips.

The darker portion has to do with the default 'style' in the strip function. It's always there for numeric (shingle) variables. For factors, S-PLUS defaults to style=3, which shows the darker parts, while lattice default to style=1, which doesn't.

> Now I have one perplexity and one question:
>
> The last "list((1:4)[order(...." works fine, but it seems to me
> inelegant, too complicate and not practical for plots with more
> factors. Any suggestion to simplify/improve the matter?

As a matter of fact, I'm working on something like this for a future version of lattice. But in your example, where you know beforehand how your factor levels should be ordered, I think you should just define your factor properly. e.g.,

LOCATION = factor(rep(rep(c(5, 1, 3, 7), each=3), 2),

                  levels = c(1, 3, 5, 7), 
                  labels = c("there1%OM", "elsewhere3%OM", 
                             "here5%OM", "overthere7%OM"))

What's happening now is that LOCATION is defined as a character vector, which is eventually coerced to a factor with levels in the default (in this case undesirable) order.

> How can I keep the tags in the strips, still ordering the panels by
> OM?

You need to add something like

  strip = function(..., style) strip.default(..., style = 3)

to your bwplot call.

> Thanks in advance.
>
> PS
> The following lines are copied from ?xyplot
> (I suspect that "order.cond" stands for "index.cond",
> since I cannot find it in any other page of the lattice help, nor in
> the general help)

You are right. I'll fix that.

Deepayan



R-help@stat.math.ethz.ch mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Jul 06 04:07:14 2004

This archive was generated by hypermail 2.1.8 : Wed 03 Nov 2004 - 22:54:43 EST