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. Best regards, Martin ----------------------------------------------------------------- ?????????? ??????????? ? ?????? ?? ?????????? http://www.sdi.bg/onlineInsurance/?utm_source=gbg&utm_medium=txtLink&utm_content=home
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
Dear Martin, Mea culpa! I screwed up. I was answering (not well, at that) a different question and somehow managed to make it a response to your request. Here's what may be a solution to your problem. (see also this post by ilai: <<https://stat.ethz.ch/pipermail/r-help/attachments/20120718/7133b673/attachment.pl>>) We define appropriate locations for the x-ticks to go with suitably defined labels and corresponding tick lengths. ## data: d <- data.frame(x = 1:11, y = rnorm(11)) ## Where to put ticks and labels myat <- 1:11 mylab <- head(c(rbind(LETTERS[1:6], "")), -1) # putting letters at every second tick ## lengths of ticks mytck <- head(c(rbind(rep(1,6), .5)), -1) ## myat, mylab, mytck should all be same length ## plot xyplot(y ~ x, data = d, xlab="", scales = list(x = list( at = myat, labels = mylab)), par.settings = list( axis.components = list( bottom = list(tck = mytck)))) ## Try it with different myat etc to see how it works myat <- seq(1, 11, by = 2/3) mylab <- head(c(rbind(LETTERS[1:6], "", "")), -2) mytck <- head(c(rbind(rep(2,6), .5, .5)), -2) myat <- seq(1, 11, by = 1/2) mylab <- head(c(rbind(LETTERS[1:6], "", "", "")), -3) mytck <- head(c(rbind(rep(2,6), .5, 1, .5)), -3) The trick is in constructing suitable vectors myat, mylab, and mytck which you can do any way you like but I would check that the lengths are equal (recycling works fine for simple cases but always seems to trip me up in more complicated cases). Peter Ehlers On 2012-07-26 07:02, Martin Ivanov wrote:> > Dear Peter, > > Thank You very much for your suggestion. However, it seems to me to make a completely new notation to the x axis. While I just need to add minor ticks to the axis, that is smaller ticks inbetween the basic ticks. > The other option would be to say which ticks to be small and which big, but I have no idea how. > > Any suggestions will be appreciated. > > Best regards, > > Martin ><< embarassing junk from P. Ehlers cut >>
Apparently Analagous Threads
- Adding units to levelplot's colorkey
- How to generate 'minor' ticks in lattice (qqmath)
- bug and proposed fix in print.trellis 1.7.0 (PR#2859)
- lattice: axis ticks, axis alignment and remove axis from plot
- [lattice] Increase distance between tick labels and ticks in wireframe plot ("pad")