[R] minor axis ticks in trellis graphics?

Peter Ehlers ehlers at ucalgary.ca
Sun Jul 15 18:36:44 CEST 2012


On 2012-07-13 01:05, Martin Ivanov wrote:
>   Dear R users,
>
> I need to add minor axis ticks to my graph. In traditional R this is easily achievable by simply
> adding a second axis with the minor ticks. But how to do that in trellis? I am already out of ideas.
>
> Any suggestions will be appreciated.

Haven't seen a response yet, so I'll give it a shot,
sure to be replaced by something much simpler by
Deepayan when he finds the time.

Here are two ways:

1.
Assign appropriate values to the elements of
the xscale.components list. I prefer this.

## make some data
d <- data.frame(x = 1:12, y = rnorm(12))
at.ticks <- c(4,8)
at.labels <- c(2,6,10)
the_labels <- letters[1:3]

library(lattice)

## define a function to modify the xscale components;
## this function will be used inside xyplot().
myxscale.components <- function(...)
{
     ans <- xscale.components.default(...)
     ans$bottom$ticks$at <- at.ticks
     ans$bottom$labels$at <- at.labels
     ans$bottom$labels$labels <- the_labels
     ans
}

## do the plot
xyplot(y ~ x, data = d,
     scales = list(tck = c(1,0)),
     xscale.components = myxscale.components)

You can put the modifying function inside the xyplot call.
See ?axis.components.


2.
This is more like the base graphics way.
We create the plot without the x-axis and then
use the trellis.focus/unfocus functions in
conjunction with the panel.axis() function.
See ?panel.axis for details.

Here's the function to apply after the xyplot call:

myfocus <- function(){
   trellis.focus("panel", 1, 1,
      clip.off = TRUE,
      highlight = FALSE)

   ## put the ticks in
   panel.axis(side = "bottom",
      at = at.ticks,
      labels = FALSE,
      ticks = TRUE,
      tck = 1, outside = TRUE
   )

   ## put the labels in
   panel.axis(side = "bottom",
      at = at.labels,
      labels = the_labels,
      ticks = FALSE,
      tck = 0, outside = TRUE,
      rot = 0   # optional; try it without
   )
   trellis.unfocus()
}


xyplot(y ~ x, data = d,
     scales = list(
          y = list(tck = c(1,0)),
          x = list(tck = c(0,0),
                 at = 1, label = ""  # to give us some bottom space
              )))

## Now add the axis ticks and labels
myfocus()


Peter Ehlers


>
> Best regards,
>
> Martin



More information about the R-help mailing list