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!

## Function `loglog.plot`

To provide the log-linear gridlines and tickmarks, I have wrtitten function `loglog.plot`

.

**To load the function** from my GitHub repository:

`source("https://raw.githubusercontent.com/petrkeil/Blog/master/2016_07_05_Log_scales/loglogplot.r")`

**Arguments:**

`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 `plot`

.

**Value:**

Empty R base graphics plot, ready to be populated using `lines`

, `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")
```