Search code examples
rggplot2axisnumber-formattinglogarithm

Number formatting with log10 scale in ggplot


I transformed the axis number to the log scale, but I also wanted to set number accuracy (decimal places) and decimal marks (dot or comma). My code is reproducible as follows.

library(tidyverse)

mtcars %>% ggplot(aes(x=mpg, y=disp))+
  geom_point() +
  scale_x_continuous(trans = log_trans(),
                            breaks = trans_breaks("log", function(x) exp(x), n.breaks = 5),
                            labels = trans_format("log", math_format(e^.x)))

Note that decimal places and marks of x-axis cannot be configured.

I tried to add a second scale_x_continuous with the wanted configurations, but it failed.


Solution

  • You could use the format argument of math_format to change the number of decimals like this:

    library(tidyverse)
    library(scales)
    mtcars %>% ggplot(aes(x=mpg, y=disp))+
      geom_point() +
      scale_x_continuous(trans = log_trans(),
                         breaks = trans_breaks("log", function(x) exp(x), n.breaks = 5),
                         labels = trans_format("log", math_format(e^.x, format = function(x) number(x, accuracy = 0.1))))
    

    Created on 2023-01-27 with reprex v2.0.2