I like Mathematica’s and Matlab’s log-log plots with logarithmic axes and linear tickmarks (and gridlines). In a way, they enable to imagine both multiplication and addition in a single figure. They also enable to more exactly visually connect data points with values.
I haven’t found a simple ‘one-liner’ that’d do such plots in R. In fact, I have always found R’s treatment of logarithmic axes a bit dull - I want the fancy gridlines!
To provide the log-linear gridlines and tickmarks, I have wrtitten function
To load the function from my GitHub repository:
xlim, ylim - Numeric vectors of length 2, giving the x and y coordinates ranges on linear scale.
xlog, ylog - Logical value indicating if x and y axes should be logarithmic (TRUE) or linear (FALSE). In case the linear scale is chosen, no gridlines are drawn.
xbase, ybase - Base of the logarithm of the respective axes. Ignored if linear axis is specified.
... - Further arguments to the generic R function
Empty R base graphics plot, ready to be populated using
points and alike.
Example 1 - both axes logarithmic
Here I plot three power functions: one sub-linear (exponent = 0.8), one linear (exponent = 1) and one supra-linear (exponent = 1.2).
par(mfrow=c(1,2)) x <- seq(1, 1000, by=10) # left panel - both axes linear plot(x, x, ylim=c(0,4000)) points(x, x^0.8, col="blue") points(x, x^1.2, col="red") # right panel - loglog plot loglog.plot(xlab="x", ylab="y", ylim=c(1, 10000)) points(log10(x), log10(x)) points(log10(x), 0.8*log10(x), col="blue") points(log10(x), 1.2*log10(x), col="red")
Example 2 - x logarithmic, y linear
In this example I plot a lognormal probability density function, and I only plot the tickmarks and gridlines along the x-axis. The y-axis is linear.
par(mfrow=c(1,2)) x <- 1:1000 # left panel - linear plot(x, dlnorm(x, meanlog=4), ylim=c(0, 0.012), col="red", ylab="probability density") # right panel - loglog plot loglog.plot(ylog=FALSE, ylim=c(0,0.012), xlim=c(0.1, 1000), xlab="x", ylab="probability density", ) points(log10(x), dlnorm(x, meanlog=4), col="red")