On 2010-05-26 4:03, Gavin Simpson wrote:
Dear List,
I have been writing a Lattice function to draw what we call
stratigraphic diagrams, these are diagrams with a panel for each species
showing a time series of abundance, but drawn vertically to represent
time passing from bottom of plot towards to top.
I am most of the way there with this now, but I want to do away with the
strip on each panel and instead draw a custom top axis with a single
tick mark (situated at the panel midpoint) with label equal to that
which would be used for the strip text. I can do all of this except get
the correct label. How do I get access to the factor level being plotted
in each panel within my custom axis function?
It may be easier to illustrate than explain, so here is a dummy example,
including a version of my custom axis function.
require(lattice)
## custom axis function
axis.VarLabs<- function(side, ...) {
? ? if(isTRUE(all.equal(side, "top"))) {
? ? ? ? M<- function(lims) min(lims) + (diff(lims) / 2)
? ? ? ? xlim<- current.panel.limits()$xlim
? ? ? ? panel.axis(side = side, outside = TRUE, at = M(xlim),
? ? ? ? ? ? ? ? ? ?tck = 1, line.col = "black",
? ? ? ? ? ? ? ? ? ?text.col = "black", rot = 45)
? ? } else {
? ? ? ? axis.default(side = side, ...)
? ? }
}
## demo data
set.seed(123)
dat<- data.frame(X = rnorm(1000), Y = rpois(1000, 2),
? ? ? ? ? ? ? ? ? fac = sample(gl(4, 500, labels = LETTERS[1:4])))
head(dat)
str(dat)
## xyplot with custom axis --- note I leave the strip on here to show
## that I want the labels to be A, B, C, D on the top axis ticks...
xyplot(Y ~ X | fac, data = dat, axis = axis.VarLabs, layout = c(4,1,1))
# There must a better way, but this works; add
?labels = levels(dat$fac)[panel.number()],