[R] Lattice : factor levels in the margins

Paul Murrell p.murrell at auckland.ac.nz
Fri Mar 25 00:31:49 CET 2005


Yves Brostaux wrote:
> Hello !
> I'm struggling again against lattice graprhics. ;) I'm trying to produce 
> a conditionnal xyplot with two conditionning factors (let's say A and 
> B). I want the levels of those factors (A1, A2, etc)  to show in the 
> margins of the lattice plot, not in the strips between the panels.
> A1     A2     A3
> plot11 plot12 plot13  B1
> plot21 plot22 plot23  B2
> I managed to remove the strips with strip=FALSE, but now I can't find 
> how to write the levels of the factors in the margin in front of their 
> respective lines/columns. It doesn't seems that xlab and ylab arguments 
> could help doing this, as I can't insert multiple xlab's (x variable and 
> A levels, or y variable and B levels) and can't decide which side to use 
> for writing them.
> Does anybody have a hint ? Thank you very much !

Here's one approach, using trellis.focus() and grid.text().  This 
particular example is obviously hand-tuned to the example data set, but 
it shouldn't be too hard to generalise.  I don't think you can do this 
via a panel function because output is clipped to the current panel for 
panel functions (Deepayan Sarkar may be able to confirm or deny that).

# "standard" dotplot
dotplot(variety ~ yield | year * site, data=barley)

# Customised version
# lattice plot without strips
dotplot(variety ~ yield | year * site, data=barley,
# move to panel (1, 6) and turn clipping off so can draw outside panel
trellis.focus("panel", 1, 6, clip.off=TRUE, highlight=FALSE)
# draw factor label 2 lines above the top of the panel
grid.text("1932", y=unit(1, "npc") + unit(2, "lines"))
# move to next panel, repeat ad nauseam
trellis.focus("panel", 2, 6, clip.off=TRUE, highlight=FALSE)
grid.text("1931", y=unit(1, "npc") + unit(2, "lines"))
grid.text("Waseca", x=unit(1, "npc") + unit(1, "lines"), rot=90)
trellis.focus("panel", 2, 5, clip.off=TRUE, highlight=FALSE)
grid.text("Crookston", x=unit(1, "npc") + unit(1, "lines"), rot=90)
trellis.focus("panel", 2, 4, clip.off=TRUE, highlight=FALSE)
grid.text("Morris", x=unit(1, "npc") + unit(1, "lines"), rot=90)
trellis.focus("panel", 2, 3, clip.off=TRUE, highlight=FALSE)
grid.text("University Farm", x=unit(1, "npc") + unit(1, "lines"), rot=90)
trellis.focus("panel", 2, 2, clip.off=TRUE, highlight=FALSE)
grid.text("Duluth", x=unit(1, "npc") + unit(1, "lines"), rot=90)
trellis.focus("panel", 2, 1, clip.off=TRUE, highlight=FALSE)
grid.text("Grand Rapids", x=unit(1, "npc") + unit(1, "lines"), rot=90)

Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz

More information about the R-help mailing list