[R] Labels on axes with log scales with lattice

Deepayan Sarkar deepayan.sarkar at gmail.com
Wed Aug 17 18:42:06 CEST 2005


On 8/14/05, Jamieson Cobleigh <cobleigh at gmail.com> wrote:
> I using lattice to make some plots and I want to make the y-axis on
> some of these plots use a log scale.  In the following plot:
> 
> x <- 1:10
> y <- 2^x
> xyplot(log10(y) ~ x)
> 
> I get tick marks on the y-axis at 0.5, 1.0, 1.5, 2.0, 2.5, and 3.0.  I
> would rather have just 3 tick marks at 1.0, 2.0, and 3.0 but labeled
> 10, 100, and 1000.
> 
> I know this can be done using the "at" and "labels" parameters to the
> "x" parameter to the "scales" parameter to the "xyplot" command.
> 
> xyplot(log10(y) ~ x, scales=list(y=list(at=c(1, 2, 3), labels=c(10,
> 100, 1000))))
> 
> My problem is that I am making multiple plots and cannot set the
> labels on each plot individually.  I need to automate the computation
> of the "at" and "labels" parameters.  I think the "axTicks" command
> can compute the information I need to set "at" and "labels" correctly,
> but I am having trouble determining how to set its parameters to make
> it compute the information I need.  Perhaps "pretty" might work to,
> but "axTicks" seems better designed for handling logarithmic axes.
> 
> Does anyone have any suggestions?

The `right' way to do this is 

xyplot(y ~ x, scales = list(y = list(log = 10)))

Unfortunately, the labeling for this doesn't use axTicks, it takes the
easy way out by using labels of the form "10^2", "10^3", etc. This is
partly due to laziness on my part, and also the fact that axTicks
doesn't support all the features 'scales' claims to.

My intended `solution' to this (currently vapourware) is to allow the
user to specify a function to calculate tick positions and labels. In
principle, this could be useful for other transformations, e.g. sqrt
for rootograms. I haven't thought through what the API for this would
be like, and I don't know when I will get around to actually
implementing it.

Deepayan




More information about the R-help mailing list