[R] Controlling text and strip arrangement in xyplot

Mark Difford mark_difford at yahoo.co.uk
Tue Jun 19 21:34:59 CEST 2007


Hi Deepayan,

I, and probably quite a few others, will find this very useful until you
find the time to wrap up a proper implementation.

Many thanks,

BestR,
Mark.


Deepayan Sarkar wrote:
> 
> On 6/19/07, Juan Pablo Lewinger <lewinger at usc.edu> wrote:
>> I've searched the archives and read the xyplot help but can't figure
>> out the 2 lattice questions below?
>>
>> Consider:
>>
>> library(lattice)
>> DF <- data.frame(x=rnorm(20), y=rnorm(20), g1=rep(letters[1:2], 10),
>>                   g2=rep(LETTERS[1:2], each=10),
>> g3=rep(rep(letters[3:4],each=5),2))
>>
>> xyplot(y ~ x | g1 + g2, groups=g3, data=DF)
>>
>> 1) Is there a way to get one strip per row and column of panels as
>> below instead of the default?
>>
>>
>>         _|__a__|__b__|
>>          |
>>        B
>>          |
>>         --
>>          |
>>        A
>>          |
> 
> This has been discussed on the list before (if I remember correctly), and
> I
> have been meaning to add something to the latticeExtra package.  An
> implementation would look something like this (beware of line wrapping):
> 
> 
> useOuterStrips <-
>     function(x,
>              strip = strip.default,
>              strip.left = strip.custom(horizontal = FALSE))
> {
>     dimx <- dim(x)
>     stopifnot(inherits(x, "trellis"))
>     stopifnot(length(dimx) == 2)
>     opar <- if (is.null(x$par.settings)) list() else x$par.settings
>     par.settings <-
>         modifyList(opar,
>                    list(layout.heights =
>                         list(strip = c(rep(0, dimx[2]-1), 1)),
>                         layout.widths =
> 			list(strip.left = c(1, rep(0, dimx[1]-1)))))
>     update(x,
>            par.settings = par.settings,
>            strip = function(which.given, which.panel, ...) {
>                if (which.given == 1)
>                    strip(which.given = 1,
>                          which.panel = which.panel[1],
>                          ...)
>            },
>            strip.left = function(which.given, which.panel, ...) {
>                if (which.given == 2)
>                    strip.left(which.given = 1,
>                               which.panel = which.panel[2],
>                               ...)
>            },
>            par.strip.text = list(lines = 0.5),
>            layout = dimx)
> }
> 
> 
> The function acts on a "trellis" object and returns an updated one, so
> for your example, it would work like:
> 
> useOuterStrips(xyplot(y ~ x | g1 + g2, groups=g3, data=DF))
> 
> 
>> 2) How do I control the text of the strips so that for instance
>> instead of "a" and "b" it reads"g1=alpha", "g1=beta" where "alpha"
>> and "beta" stand for the corresponding greek symbols? (my difficulty
>> here is not with the plotmath symbols but with controlling the text
>> of the strips directly from the call to xyplot and not by renaming
>> the levels of g1)
> 
> Generally speaking, you need to write your own strip function.  The
> default (strip.default) has some useful arguments that modify its
> behaviour, and in particular 'factor.levels' might do what you
> want.  If you are going to do this in conjunction with (1), life will
> actually be simpler and you can get away with using strip.custom():
> 
> 
> useOuterStrips(xyplot(y ~ x | g1 + g2, groups=g3, data=DF),
>                strip =
>                strip.custom(factor.levels =
>                             expression(g[1]==alpha, g[1]==beta)),
>                strip.left =
>                strip.custom(horizontal = FALSE,
>                             factor.levels =
>                             expression(g[2]==gamma, g[2]==delta)))
> 
> 
> Otherwise, you will really have to write a proper strip function that
> calls strip.default() with different values of 'factor.levels'
> depending on the value of 'which.given'.
> 
> Note also the 'strip.names' and 'sep' argument of strip.default(),
> which might be more in line with what you want to do.
> 
> -Deepayan
> 
> ______________________________________________
> R-help at 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.
> 
> 

-- 
View this message in context: http://www.nabble.com/Controlling-text-and-strip-arrangement-in-xyplot-tf3944756.html#a11201335
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list