[R] Lattice Legend/Key by row instead of by column
Richard Kwock
richardkwock at gmail.com
Fri Nov 1 17:30:44 CET 2013
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