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()],

# to your panel.axis() call in axis.VarLabs.

Notice how in this plot, because I have not specified a label the 'at'
value for this point is used. Is there a way to get at the factor levels
from within an axis function? If so, how?

Secondly, how do you ensure there is enough space around the plot to
draw the axis labels without truncation - as can be seen on the example
xyplot.

# Look at the settings for layout.heights, especially
# axis.top and top.padding:

 xyplot(....,
    par.settings = list(layout.heights =
        list(axis.top = xxx,
             top.padding = xxx)))

# (Shouldn't need both; I don't know which is more
# suitable for you.)

  -Peter Ehlers

______________________________________________
R-help@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.

Reply via email to