Skip to content
Prev 67679 / 398506 Next

Legend in xyplot two columns

Thanks Deepayan!

Your solution does excatly what I want. 
Further experiments and thoughts on my side brought me also to a
solution. 
If I use the option rep=FALSE, and plot the bullit with "lines" and
split the "lines" argument into two groups it gives me the same result,
as every item in the key list starts a new column.

library(lattice)
key <- list( rep=FALSE,
               lines=list(col=c("red", "blue"), type=c("p","l"),
pch=19),
               text=list(lab=c("John","Paul")),
               lines=list(col=c("green", "red"), type=c("l", "l")),
               text=list(lab=c("George","Ringo")),
               rectangles = list(col= "#FFFFCC", border=FALSE),
               text=list(lab="The Beatles"),
		   )

xyplot(1~1, key=key)


But your solution is much more felxible!

Kind Regards

Markus

-----Original Message-----

************LNSCNTMCS01***************************************************
The information in this E-Mail and in any attachments is CONFIDENTIAL and may be privileged.  If you are NOT the intended recipient, please destroy this message and notify the sender immediately.  You should NOT retain, copy or use this E-mail for any purpose, nor disclose all or any part of its contents to any other person or persons.

Any views expressed in this message are those of the individual sender, EXCEPT where the sender specifically states them to be the views of Lloyd's.

Lloyd's may monitor the content of E-mails sent and received via its
network for viruses or unauthorised use and for other lawful
business purposes."

Lloyd's is authorised under the Financial Services and Markets Act 2000
********************************************************************************

From: Deepayan Sarkar [mailto:deepayan at stat.wisc.edu] 
Sent: 14 April 2005 16:01
To: r-help at stat.math.ethz.ch
Cc: Gesmann, Markus
Subject: Re: [R] Legend in xyplot two columns
On Thursday 14 April 2005 05:30, Gesmann, Markus wrote:
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