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:dwinsem...@comcast.net] > Sent: Tuesday, August 06, 2013 10:54 AM > To: Taylor, Sean D > Cc: r-help@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@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 ______________________________________________ R-help@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.