Skip to content

legend idea for latticeExtra

2 messages · Baptiste Auguie, Deepayan Sarkar

#
Dear list,


I've written a small utility function to add arbitrary legend(s) to a  
lattice graph (or a combination of them), much like the legend  
function of base graphics. I though perhaps it could be useful to  
someone else, or improved by suggestions. I understand this goes  
against the lattice paradigm somewhat, in that you short-cut the link  
between group variables and the appearance of the legend. There are  
some cases where I was missing this kind of raw command, though, and  
the custom legend dendrogram of the lattice book is intimidating if  
not a bit overkill.

llegend <- function(x=0.5, y=0.5, loc=FALSE, text=c("a", "b"),  
unit="npc",
					pch=1, lty=NULL, col=seq_along(text), cex=0.6,  
cex.title=0.8,  ...){
	if(loc) {
		ll <- grid.locator(unit)
		print(ll)
		x <- as.numeric(ll$x)
		y <- as.numeric(ll$y)
		}
lines <- !is.null(lty)
points <- !is.null(pch)

	keyGrob <- draw.key(key=simpleKey(text, lines=lines,
							points = points,cex=cex, cex.title=cex.title, ...),
						vp=viewport(x=unit(x, unit), y=unit(y, unit)), draw=F)
	grid.draw(keyGrob)
	invisible(keyGrob)
}

# example (locator used for the second legend)
xyplot(1~1)
llegend()
llegend(loc=T, title="Here goes another") # click wherever on the  
viewport.


Best wishes,

baptiste
_____________________________

Baptiste Augui?

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag
#
On 12/2/08, baptiste auguie <ba208 at exeter.ac.uk> wrote:
The book has a similar example:

data(Chem97, package = "mlmRev")

## Figure 12.1
qqmath(~ gcsescore | factor(score), Chem97, groups = gender,
       f.value = function(n) ppoints(100),
       aspect = "xy",
       page = function(n) {
           cat("Click on plot to place legend", fill = TRUE)
           ll <- grid.locator(unit = "npc")
           if (!is.null(ll))
               draw.key(simpleKey(levels(factor(Chem97$gender))),
                        vp = viewport(x = ll$x, y = ll$y),
                        draw = TRUE)
       })

I will consider adding a version of this in latticeExtra (both this
and your example are not sufficiently general in their present form).

-Deepayan