Learn R Programming

sfsmisc (version 1.1-0)

eaxis: Extended / Engineering Axis for Graphics

Description

An extended axis() function which labels more prettily, in particular for log-scale axes.

It makes use of plotmath or (LaTeX) expressions of the form \(k \times 10^k\) for labeling a log-scaled axis and when otherwise exponential formatting would be used (see pretty10exp).

Usage

eaxis(side, at =,
      labels = NULL, log = NULL,
      f.smalltcl = 3/5, at.small = NULL, small.mult = NULL,
      small.args = list(),
      draw.between.ticks = TRUE, between.max = 4,
      outer.at = TRUE, drop.1 = TRUE, sub10 = FALSE, las = 1,
      nintLog = max(10, par("lab")[2 - is.x]), max.at = Inf,
      lab.type = "plotmath", lab.sep = "cdot",
      …)

Arguments

side

integer in 1:4, specifying side of axis.

at

numeric vector of (“normalsized”) tick locations; by default axTicks(side, ..), i.e., the same as axis() would use.

labels

NULL (default), logical, character or expression, as in axis(); in addition, if NA, labels = TRUE is passed to axis(), i.e. pretty10exp is not used. Use FALSE to suppress any labeling.

log

logical or NULL specifying if log-scale should be used; the default depends on the current plot's axis.

f.smalltcl

factor specifying the lengths of the small ticks in proportion to the normalsized, labeled ticks.

at.small

locations of small ticks; the default, NULL, uses small.mult and constructs “smart” locations.

small.mult

positive integer (or NULL), used when at.small is NULL to indicate which multiples of at (typically axTicks()) should be used as “small ticks”. The default NULL will use 9 in the log case and a number in 2:5 otherwise.

small.args

optional list of further arguments to the axis() call which draws the small ticks.

draw.between.ticks

(only if log is true): logical indicating that possible (non-small) ticks between the labeled (via at) ones should be drawn as well (and possibly also used for at.small construction), see also between.max.

between.max

(only if log and draw.between.ticks are true): integer indicating ticks should be drawn (approximately) between the labeled ones.

outer.at

logical specifying that at.small should also be constructed outside the at range, but still inside the corresponding par("usr").

drop.1

logical specifying if \(1 \times\) should be dropped from labels, passed to pretty10exp().

sub10

logical, integer (of length 1 or 2) or "10", indicating if some \(10^k\) should be simplified to “traditional” formats, see pretty10exp.

nintLog

only used in R > 2.13.x, when log is true: approximate (lower bound on) number of intervals for log scaling.

max.at

maximal number of at values to be used effectively. If you don't specify at yourself carefully, it is recommended to set this to something like 25, but this is not the default, for back compatibility reasons.

las, …

arguments passed to (the first) axis call. Note that the default las = 1 differs from axis's default las = 0.

lab.type

string, passed to pretty10exp to choose between default plotmath or LaTeX label format.

lab.sep

separator between mantissa and exponent for LaTeX labels, see pretty10exp.

See Also

axis, axTicks, axTexpr, pretty10exp.

Examples

Run this code
x <- lseq(1e-10, 0.1, length = 201)
plot(x, pt(x, df=3), type = "l", xaxt = "n", log = "x")
eaxis(1)
## without small ticks:
eaxis(3, at.small=FALSE, col="blue")

## If you like the ticks, but prefer traditional (non-"plotmath") labels:
plot(x,  gamma(x),   type = "l", log = "x")
eaxis(1, labels=NA)

x <- lseq(.001, 0.1, length = 1000)
plot(x, sin(1/x)*x, type = "l", xaxt = "n", log = "x")
eaxis(1)

## non- log-scale : draw small ticks, but no "10^k" if not needed:
x <- seq(-100, 100, length = 1000)
plot(x, sin(x)/x, type = "l", xaxt = "n")
eaxis(1)

x <- seq(-1, 1, length = 1000)
plot(x, sin(x)/x, type = "l", xaxt = "n")
eaxis(1, small.args = list(col="blue"))

x <- x/1000
plot(x, 1-sin(x)/x, type = "l", xaxt = "n", yaxt = "n")
eaxis(1)
eaxis(2)
## more labels than default:
op <- par(lab=c(10,5,7))
plot(x, sin(x)/x, type = "l", xaxt = "n")
eaxis(1) # maybe (depending on your canvas), there are too many,
## in that case, maybe use
plot(x, sin(x)/x, type = "l", xaxt = "n")
eaxis(1, axTicks(1)[c(TRUE,FALSE)]) # drop every 2nd label
eaxis(3, labels=FALSE)

## ore use 'max.at' which thins as well:
plot(x, sin(x)/x, type = "l", xaxt = "n")
eaxis(1, max.at=6)
par(op)
## From R version 2.14.0, on, this looks better

### Answering R-help "How do I show real values on a log10 histogram", 26 Mar 2013
## the data:
       set.seed(1); summary(x <- rlnorm(100, m = 2, sdl = 3))
## the plot (w/o  x-axis) :
       r <- hist(log10(x), xaxt = "n", xlab = "x [log scale]")
## the nice axis:
       axt <- axTicks(1)
       eaxis(1, at = axt, labels = pretty10exp(10^axt, drop.1=TRUE))
## Additionally demo'ing   'sub10' options:
       plot(r, xaxt="n")
       eaxis(1, at = axt, labels = pretty10exp(10^axt, drop.1=TRUE, sub10 = 2))
## or
       plot(r, xaxt="n")
       eaxis(1, at = axt, labels = pretty10exp(10^axt, drop.1=TRUE, sub10 = "10"))
## or
       plot(r, xaxt="n")
       eaxis(1, at = axt, labels = pretty10exp(10^axt, drop.1=TRUE, sub10 = c(-2, 2)))

Run the code above in your browser using DataLab