[R] Lattice Legend/Key by row instead of by column

Duncan Mackay dulcalma at bigpond.com
Fri Nov 1 23:27:53 CET 2013


Hi Richard

Untested Perhaps adding some dummy factors with NA and then have their
labels as " " and color of lines as 0 or "transparent".

I think that I used it partly for the same reason and in addition I was
combining 2 purposes with  the groups and wanted to split them 

Duncan

-----Original Message-----
From: Richard Kwock [mailto:richardkwock at gmail.com] 
Sent: Saturday, 2 November 2013 02:31
To: Duncan Mackay
Cc: R
Subject: Re: [R] Lattice Legend/Key by row instead of by column

Hi Duncan,

Thanks for that template. Not quite the solution I was hoping for, but that
works!

Richard

On Thu, Oct 31, 2013 at 3:47 PM, Duncan Mackay <dulcalma at bigpond.com> wrote:
> Hi Richard
>
> If you cannot get a better suggestion this example from Deepayan 
> Sarkar may help.
> It is way back in the archives and I do not have a reference for it.
>
> I have used it about a year ago as a template to do a complicated key
>
> 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)))
>
> In my case I changed  "strwidth" to "cm" for the text as I was cramped 
> for space
>
> HTH
>
> Duncan
>
> Duncan Mackay
> Department of Agronomy and Soil Science University of New England 
> Armidale NSW 2351
> Email: home: mackay at northnet.com.au
>
> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Richard Kwock
> Sent: Friday, 1 November 2013 06:42
> To: R help
> Subject: [R] Lattice Legend/Key by row instead of by column
>
> Hi All,
>
> I am having some trouble getting lattice to display the legend names 
> by row instead of by column (default).
>
> Example:
>
> library(lattice)
> set.seed(456846)
> data <- matrix(c(1:10) + runif(50), ncol = 5, nrow = 10) dataset <- 
> data.frame(data = as.vector(data), group = rep(1:5, each = 10), time = 
> 1:10)
>
> xyplot(data ~ time, group = group, dataset, t = "l",
>   key = list(text = list(paste("group", unique(dataset$group)) ),
>     lines = list(col = trellis.par.get()$superpose.symbol$col[1:5]),
>     columns = 4
>   )
> )
>
> What I'm hoping for are 4 columns in the legend, like this:
> Legend row 1: "group 1", "group 2", "group 3", "group 4"
> Legend row 2: "group 5"
>
> However, I'm getting:
> Legend row 1: "group 1", "group 3", "group 5"
> Legend row 2: "group 2", "group 4"
>
> I can see how this might work if I include blanks/NULLs in the legend 
> as placeholders, but that might get messy in data sets with many groups.
>
> Any ideas on how to get around this?
>
> Thanks,
> Richard
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org 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.
>



More information about the R-help mailing list