Labelling logarithmic scale display in R

axes, label, logarithm, plot, r

Solution

Apart from the solution of ggplot2 (see gsk3's comment), I would like to add that this happens automatically in plot() as well when using the correct arguments, eg :

x <- 1:10
y <- exp(1:10)
plot(x,y,log="y")

You can use the parameter `log="x"` for the X axis, or `log="xy"` for both.

If you want to format the numbers, or you have the data in log format, you can do a workaround using axis(). Some interesting functions :

- `axTicks(x)` gives you the location of the ticks on the X-axis (x=1) or Y-axis (x=2)

- `bquote()` converts expressions to language, but can replace a variable with its value. More information on `bquote()` in the question Latex and variables in plot label in R? .

- `as.expression()` makes the language object coming from `bquote()` an expression. This allows `axis()` to do the formatting as explained in `?plotmath`. It can't do so with language objects.

An example for nice formatting :

x <- y <- 1:10
plot(x,y,yaxt="n")
aty <- axTicks(2)
labels <- sapply(aty,function(i)
            as.expression(bquote(10^ .(i)))
          )
axis(2,at=aty,labels=labels)

Which gives

Problem

While plotting histogarm, scatterplots and other plots with axes scaled to logarithmic scale in R, how is it possible to use labels such as 10^-1 10^0 10^1 10^2 10^3 and so on instead of the axes showing just -1, 0, 1, 2, 3 etc. What parameters should be added to the commands such as hist(), plot() etc?

Original source

Related problems