Re: [R] Legend in xyplot two columns

From: Deepayan Sarkar <deepayan_at_stat.wisc.edu>
Date: Fri 15 Apr 2005 - 01:00:43 EST

On Thursday 14 April 2005 05:30, Gesmann, Markus wrote:
> Dear R-Help
>
> I have some trouble to set the legend in a xyplot into two rows.
> The code below gives me the legend in the layout I am looking for, I
> just rather have it in two rows.
>
> library(lattice)
> schluessel <- list(
> points=list( col="red", pch=19, cex=0.5 ),
> text=list(lab="John"),
> lines=list(col="blue"),
> text=list(lab="Paul"),
> lines=list(col="green"),
> text=list(lab="George"),
> lines=list(col="orange"),
> text=list(lab="Ringo"),
> rectangles = list(col= "#FFFFCC", border=FALSE),
> text=list(lab="The Beatles"),
> )
>
> xyplot(1~1, key=schluessel)
>
> The next code gives me two rows, but repeates all the points,lines,
> and rectangles.
>
> schluessel2 <- list(
> points=list( col="red", pch=19, cex=0.5 ),
> lines=list(col=c("blue", "green", "orange")),
> rectangles = list(col= "#FFFFCC", border=FALSE),
> text=list(lab=c("John","Paul","George","Ringo", "The
> Beatles")),
> columns=3,
> )
>
> xyplot(1~1, key=schluessel2)
>
> So I think each list has to have 6 items, but some with "no" content.
> How do I do this?

You could try using col="transparent" to suppress things, but that's not a very satisfactory solution. The function to create the key is simply not designed to create unstructured legends like this. However, you can create an use an arbitrary ``grob'' (grid graphics object) for a legend, e.g.:

##-----------------

library(grid)
library(lattice)

fl <-

    grid.layout(nrow = 2, ncol = 6,

                heights = unit(rep(1, 2), "lines"),
                widths =
                unit(c(2, 1, 2, 1, 2, 1),
                     c("cm", "strwidth", "cm",
                       "strwidth", "cm", "strwidth"),
                     data = list(NULL, "John", NULL,
                     "George", NULL, "The Beatles")))

foo <- frameGrob(layout = fl)
foo <- placeGrob(foo,

                 pointsGrob(.5, .5, pch=19,
                            gp = gpar(col="red", cex=0.5)),
                 row = 1, col = 1)
foo <- placeGrob(foo,
                 linesGrob(c(0.2, 0.8), c(.5, .5),
                           gp = gpar(col="blue")),
                 row = 2, col = 1)
foo <- placeGrob(foo,
                 linesGrob(c(0.2, 0.8), c(.5, .5),
                           gp = gpar(col="green")), 
                 row = 1, col = 3)
foo <- placeGrob(foo,
                 linesGrob(c(0.2, 0.8), c(.5, .5),
                           gp = gpar(col="orange")), 
                 row = 2, col = 3)
foo <- placeGrob(foo,
                 rectGrob(width = 0.6, 
                          gp = gpar(col="#FFFFCC",
                          fill = "#FFFFCC")), 
                 row = 1, col = 5)
foo <- placeGrob(foo,
                 textGrob(lab = "John"), 
                 row = 1, col = 2)
foo <- placeGrob(foo,
                 textGrob(lab = "Paul"), 
                 row = 2, col = 2)
foo <- placeGrob(foo,
                 textGrob(lab = "George"), 
                 row = 1, col = 4)
foo <- placeGrob(foo,
                 textGrob(lab = "Ringo"), 
                 row = 2, col = 4)
foo <- placeGrob(foo,
                 textGrob(lab = "The Beatles"), 
                 row = 1, col = 6)

xyplot(1 ~ 1, legend = list(top = list(fun = foo)))

##-----------------

HTH, 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 Received on Fri Apr 15 01:20:32 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:11 EST