Re: [R] lattice xscale.components: different ticks on top/bottom axis

From: <Boris.Vasiliev_at_forces.gc.ca>
Date: Fri, 01 Apr 2011 15:59:11 -0400

> On Fri, Mar 11, 2011 at 12:28 AM,
> <Boris.Vasiliev_at_forces.gc.ca> wrote:
> > Good afternoon,
> >
> > I am trying to create a plot where the bottom and top axes have the
> > same scale but different tick marks.  I tried user-defined
> > xscale.component function but it does not produce desired results.  
> > Can anybody suggest where my use of xscale.component
> > function is incorrect?
> >
> > For example, the code below tries to create a plot where horizontal
> > axes limits are c(0,10), top axis has ticks at odd integers, and
> > bottom axis has ticks at even integers.
> >
> > library(lattice)
> >
> > df <- data.frame(x=1:10,y=1:10)
> >
> > xscale.components.A <- function(...,user.value=NULL) {
> >  # get default axes definition list; print user.value
> >  ans <- xscale.components.default(...)
> >  print(user.value)
> >
> >  # start with the same definition of bottom and top axes
> >  ans$top <- ans$bottom
> >
> >  # - bottom labels
> >  ans$bottom$labels$at <- seq(0,10,by=2)
> >  ans$bottom$labels$labels <- paste("B",seq(0,10,by=2),sep="-")
> >
> >  # - top labels
> >  ans$top$labels$at <- seq(1,9,by=2)
> >  ans$top$labels$labels <- paste("T",seq(1,9,by=2),sep="-")
> >
> >  # return axes definition list
> >  return(ans)
> > }
> >
> > oltc <- xyplot(y~x,data=df,
> >
> > scales=list(x=list(limits=c(0,10),at=0:10,alternating=3)),
> >               xscale.components=xscale.components.A,
> >               user.value=1)
> > print(oltc)
> >
> > The code generates a figure with incorrectly placed bottom and top
> > labels.  Bottom labels "B-0", "B-2", ... are at 0, 1, ... and top
> > labels "T-1", "T-3", ... are at 0, 1, ...  When axis-function runs out
> > of labels, it replaces labels with NA.
> >
> > It appears that lattice uses top$ticks$at to place labels and
> > top$labels$labels for labels.  Is there a way to override this
> > behaviour (other than to expand the "labels$labels" vector to be as
> > long as "ticks$at" vector and set necessary elements to "")?
>
> Well, <top|bottom>$ticks$at is used to place the ticks, and
> $labels$at is used to place the labels. They should typically
> be the same, but you have changed one and not the other.
> Everything seems to work if you set $ticks$at to the same
> values as $labels$at:
>
>
> ## - bottom labels
> + ans$bottom$ticks$at <- seq(0,10,by=2)
> ans$bottom$labels$at <- seq(0,10,by=2)
> ans$bottom$labels$labels <- paste("B",seq(0,10,by=2),sep="-")
>
> ## - top labels
> + ans$top$ticks$at <- seq(1,9,by=2)
> ans$top$labels$at <- seq(1,9,by=2)
> ans$top$labels$labels <- paste("T",seq(1,9,by=2),sep="-")
>
>
> > Also, can user-parameter be passed into xscale.components()
> > function? (For example, locations and labels of ticks on the top
> > axis).  In the code above, print(user.value) returns NULL even
> > though in the xyplot() call user.value is 1.
>
> No. Unrecognized arguments are passed to the panel function
> only, not to any other function. However, you can always
> define an inline
> function:
>
> oltc <- xyplot(y~x,data=df,
> scales=list(x=list(limits=c(0,10), at = 0:10,
> alternating=3)),
> xscale.components = function(...)
> xscale.components.A(..., user.value=1))
>
> Hope that helps (and sorry for the late reply).
>
> -Deepayan
>

Deepyan,

Thank you very much for your reply. It makes things a bit clearer.

It other words in the list prepared by xscale.components(), vectors <top|bottom>$ticks$at and <top|bottom>$labels$at must be the same. If only every second tick is to be labelled then every second label should be set explicitly to empty strings:

  ans$bottom$ticks$at <- seq(0,10,by=1)
  ans$bottom$labels$at <- seq(0,10,by=1)
  ans$bottom$labels$labels <- paste("B",seq(0,10,by=1),sep="-")
  # replace "B-1", "B-3", ... with ""
  ans$bottom$labels$labels[seq(2,11,by=2)] <- ""

Sincerely,
Boris.



R-help_at_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. Received on Fri 01 Apr 2011 - 20:02:35 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 01 Apr 2011 - 21:10:26 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive