eaxis.Rd
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).
eaxis(side, at = if(log) axTicks(side, axp=axp, log=log, nintLog=nintLog)
else axTicks(side, axp=axp, log=log),
labels = NULL, log = NULL,
use.expr = log || format.info(as.numeric(at), digits=7)[3] > 0,
f.smalltcl = 3/5, at.small = NULL, small.mult = NULL, equidist.at.tol = 0.002,
small.args = list(),
draw.between.ticks = TRUE, between.max = 4,
outer.at = TRUE, drop.1 = TRUE, sub10 = FALSE, las = 1,
nintLog = max(12, par("lab")[2 - is.x]),
axp = NULL, n.axp = NULL, max.at = Inf,
lab.type = "plotmath", lab.sep = "cdot",
...)integer in 1:4, specifying side of axis.
numeric vector of (“normalsized”) tick locations; by
default axTicks(side, ..), i.e., the same as
axis() would use.
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.
logical or NULL specifying if log-scale should be
used; the default depends on the current plot's axis.
logical specifying if pretty10exp(.) should
be used for constructing labels when they are NULL. The
default is typically good enough, but you may occasionally force
use.expr = TRUE.
factor specifying the lengths of the small ticks in proportion to the normalsized, labeled ticks.
locations of small ticks; the default,
NULL, uses small.mult and constructs “smart”
locations.
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.
a small positive number, a tolerance to be used
for checking equidistant at values. Used to be hardwired at
.001 which was seen to be too small; increase it when necessary.
optional list of further arguments to
the (second) axis() call which draws the small 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.
(only if log and draw.between.ticks
are true): integer indicating ticks should be drawn (approximately)
between the labeled ones.
logical specifying that at.small should also be
constructed outside the at range, but still inside the
corresponding par("usr").
logical specifying if \(1 \times\) should be dropped
from labels, passed to pretty10exp().
logical, integer (of length 1 or 2), "10" or "100",
indicating if
some \(10^k\) should be simplified to “traditional”
formats, see pretty10exp.
only used in R > 2.13.x, when log is true:
approximate (lower bound on) number of intervals for log scaling.
to be passed to axTicks() if at is not
specified.
to be set to axp[3] when axp and at
are not specified, in order to tweak the number of (non-small)
tick marks produced from axTicks(..), notably when
log is true, set n.axp to 1, 2, or 3:
will produce tick marks at \(10^j\) for integer \(j\),
gives marks \(k 10^j\) with \(k \in \{1, 5\}\),
gives marks \(k 10^j\) with \(k \in \{1, 2, 5\}\)
see 'xaxp' on the par help page.
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.
arguments passed to (the first) axis
call. Note that the default las = 1 differs from
axis's default las = 0.
string, passed to pretty10exp to choose
between default plotmath or LaTeX label format.
separator between mantissa and exponent for LaTeX labels,
see pretty10exp.
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)
eaxis(3, n.axp = 1)# -> xaxp[3] = 1: only 10^j (main) ticks
## 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) # default -> {1, 2, 5} * 10^j ticks
eaxis(3, n.axp = 2)# -> xaxp[3] := 2 -- approximately two (main) ticks
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)
### 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))
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.010 1.683 10.472 248.639 58.832 9945.279
## 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)))