[R] lattice yscale.components: use multiple convenience functions
Taylor, Sean D
sdtaylor at fhcrc.org
Fri Aug 9 21:50:58 CEST 2013
Not sure if this what you were recommending that I do, but based on what I saw in figures 8.4 and 8.5, I was able to combine the yscale.components.log10ticks function definition with that of yscale.components.logpower into my own custom function:
###default .log10ticks:
> yscale.components.log10ticks
function (lim, logsc = FALSE, at = NULL, ...)
{
ans <- yscale.components.default(lim = lim, logsc = logsc,
at = at, ...)
if (is.null(at))
return(ans)
if (identical(logsc, FALSE))
return(ans)
logbase <- logsc
if (identical(logbase, TRUE))
logbase <- 10
if (identical(logbase, "e"))
logbase <- exp(1)
tick.at <- logTicks(logbase^lim, loc = 1:9)
tick.at.major <- logTicks(logbase^lim, loc = 1)
major <- tick.at %in% tick.at.major
ans$left$ticks$at <- log(tick.at, logbase)
ans$left$ticks$tck <- ifelse(major, 1, 0.5)
ans$left$labels$at <- log(tick.at, logbase)
ans$left$labels$labels <- as.character(tick.at)
ans$left$labels$labels[!major] <- ""
ans$left$labels$check.overlap <- FALSE
ans
}
####default .logpower:
> yscale.components.logpower
function (lim, ...)
{
ans <- yscale.components.default(lim, ...)
ans$left$labels$labels <- parse(text = ans$left$labels$labels)
ans
}
#####Combine the two functions:
yscale.components.logpowerTicks<-function (lim, logsc = FALSE, at = NULL, ...)
{
ans <- yscale.components.default(lim = lim, logsc = logsc,
at = at, ...)
if (is.null(at))
return(ans)
if (identical(logsc, FALSE))
return(ans)
logbase <- logsc
if (identical(logbase, TRUE))
logbase <- 10
if (identical(logbase, "e"))
logbase <- exp(1)
tick.at <- logTicks(logbase^lim, loc = 1:9)
tick.at.major <- logTicks(logbase^lim, loc = 1)
major <- tick.at %in% tick.at.major
ans$left$ticks$at <- log(tick.at, logbase)
ans$left$ticks$tck <- ifelse(major, 1, 0.5)
ans$left$labels$at <- log(tick.at, logbase)
####This is the line that I changed
ans$left$labels$labels <- parse(text=(paste0(logbase, '^', ans$left$labels$at)))
######
ans$left$labels$labels[!major] <- ""
ans$left$labels$check.overlap <- FALSE
ans
}
##It seems that if you define this yourself, you also have to explicitly define this helper function:
logTicks <- function (lim, loc = c(1, 5)) {
ii <- floor(log10(range(lim))) + c(-1, 2)
main <- 10^(ii[1]:ii[2])
r <- as.numeric(outer(loc, main, "*"))
r[lim[1] <= r & r <= lim[2]]
}
It seems to do what I want:
xyplot((1:200)/20 ~ (1:200)/20, type = c("p", "g"),
scales = list(x = list(log = 10), y = list(log = 10)),
yscale.components = yscale.components.logpowerTicks)
Is there a way to automatically load this function when I start R so it is always available when I want it?
Thanks,
Sean
> -----Original Message-----
> From: David Winsemius [mailto:dwinsemius at comcast.net]
> Sent: Tuesday, August 06, 2013 10:54 AM
> To: Taylor, Sean D
> Cc: r-help at r-project.org
> Subject: Re: [R] lattice yscale.components: use multiple convenience
> functions
>
>
> On Aug 6, 2013, at 9:09 AM, Taylor, Sean D wrote:
>
> > Good morning,
> >
> > I really enjoy some of the recent convenience functions in lattice_0.20-15
> and latticeExtra_0.6-24. I am wondering if there is a way to use multiple
> functions in the same call? Specifically, I would like to be able to use
> yscale.components.log10ticks (to get the major tick marks at powers of 10
> and minor tick marks in between) and also label the major tick marks smartly
> using superscripts for the power. Something along the lines of this:
>
> See the code supporting figures 8.4 and 8.5 in Sarkar's Lattice book.
>
> --
> David.
> >
> > ##Pseudocode, does not work
> > xyplot((1:200)/20 ~ (1:200)/20, type = c("p", "g"),
> > scales = list(x = list(log = 2), y = list(log = 10)),
> > xscale.components = xscale.components.fractions,
> > yscale.components = list(yscale.components.log10ticks,
> > yscale.components.logpower))
> >
> > or this:
> > ##Does not work
> > xyplot((1:200)/20 ~ (1:200)/20, type = c("p", "g"),
> > scales = list(x = list(log = 2), y = list(log = 10)),
> > xscale.components = xscale.components.fractions,
> > yscale.components = function(...){
> > yscale.components.log10ticks
> > yscale.components.logpower}
> > )
> >
> > Thanks!
> > Sean
> >
> > Sean Taylor
> > Post-doctoral Fellow
> > Fred Hutchinson Cancer Research Center
> > 206-667-5544
> >
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
>
> David Winsemius
> Alameda, CA, USA
More information about the R-help
mailing list