[R] Lattice xyplot log scale labels help!

Deepayan Sarkar deepayan.sarkar at gmail.com
Mon Nov 21 07:42:20 CET 2011


On Fri, Sep 16, 2011 at 6:56 PM, Deepayan Sarkar
<deepayan.sarkar at gmail.com> wrote:
> On Fri, Sep 16, 2011 at 2:17 AM, Cram Rigby <cram.rigby at gmail.com> wrote:
>> I have a problem with lattice log scales that I could use some help with.
>>
>> I'm trying to print log y-axis scales without exponents in the labels.
>>  A similar thread with Deepayan' recommendation is here:
>> http://tolstoy.newcastle.edu.au/R/e11/help/10/09/9865.html.  For
>> example, this code using xyplot produces a logged y-axis but the
>> labels  (e.g. "10^1.2") are not very user-friendly:
>>
>> xyplot(24:300~24:300, scales=list(y=list(log=T)))
>>
>> So, trying another y.scale.component function, we get something more
>> agreeable for y-axis scale labels:
>>
>> xyplot(24:300~24:300, scales=list(y=list(log=T)), yscale.components =
>> yscale.components.log10.3)
>>
>>
>> However, my problem is that occasionally I'll have to plot data that
>> doesn't quite "work".  For example, in the following example, I only
>> get one y-axis scale label:
>>
>> xyplot(11:30~11:30, scales=list(y=list(log=T)), yscale.components =
>> yscale.components.log10.3)
>>
>> or worse, no y-axis scale labels:
>>
>> xyplot(11:19~11:19, scales=list(log=T), yscale.components =
>> yscale.components.log10.3)
>>
>>
>> What would be most helpful is if someone can show me how to use an
>> xyplot y-scale function to mimic log y-scale labels generated with the
>> standard plot command.  This seems to work regardless of the
>> underlying data range:
>>
>> plot(11:30,11:30,log = "y")
>> plot(24:300,24:300,log="y")
>
> That is because the standard graphics log-axis rules (which is
> codified in axTicks(), and depends critically on par("yaxp")) is more
> sophisticated than latticeExtra:::logTicks() (which was originally
> written as a proof-of-concept demo).
>
> To make logTicks() equally sophisticated, we need to replicate the
> logic used to compute par("yaxp") (in src/main/graphics.c, I think),
> which is doable, but not trivial.

And thanks to Martin Maechler, these nontrivial computations are now
more easily accessible outside the traditional graphics world. In the
development version of lattice (on r-forge, not yet released to CRAN),
you can do

xyplot(11:30~11:30, scales=list(y=list(log=T, equispaced.log = FALSE)))

etc. This requires R 2.14.0 or better.

-Deepayan



More information about the R-help mailing list