On Thursday 17 February 2005 19:39, Patrick Connolly
wrote:> The xyplot help page gives quite a lot of information how to use key
> and indicates that legend needs to be used if multiple keys are
> needed. However, it gives only a brief description of what the grob
> needs to contain to do multiple keys.
You may have a slight confusion. Each ``key'' has to be a single grob
(but a grob can be arbitrarily complicated).
> I've only used the occasional grid function in panel functions, so I
> don't have much of a sense of how grobs are constructed. I've been
> unable to find examples of code used to do multiple keys and would
> appreciate being pointed in the direction of some.
You would need to read up on grid documentation to learn about grobs.
lattice offers two functions that explicitly create grobs, namely
draw.key and draw.colorkey. The second last example in 'demo(lattice)'
has an example of shadowed text, which I've modified in the example
below:
g1 <- textGrob(rep("Fancy text", 2),
x = unit(.5, "npc") + unit(c(.5, 0), "mm"),
y = unit(.5, "npc") + unit(c(0, .5), "mm"),
gp = gpar(col = c("black", "red"), cex = 3))
g2 <- textGrob("This is \na text grob")
xyplot(rnorm(10) ~ rnorm(10),
legend list(inside list(fun = draw.key,
x = .3, y = .7,
args list(key = list(points = list(col = 1:3),
text = list(letters[1:3])),
draw = FALSE)),
bottom = list(fun = g1),
top = list(fun = g2)))
The 'inside' component illustrates how you can create grobs inline using
a function. This is useful if you need to create your grobs at the time
of printing (e.g. if it makes uses of trellis.par.get), but otherwise a
more readable version of this example is:
g3 <-
draw.key(key = list(points = list(col = 1:3),
text = list(letters[1:3])),
draw = FALSE)
xyplot(rnorm(10) ~ rnorm(10),
legend list(inside = list(fun = g3, x = .3, y = .7),
bottom = list(fun = g1),
top = list(fun = g2)))
Hope that helps somewhat,
Deepayan