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?