# [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

```