How do I change the number of decimal places on axis labels in ggplot2?

From the help for ?scale_y_continuous, the argument 'labels' can be a function:

labels One of:

  • NULL for no labels

  • waiver() for the default labels computed by the transformation object

  • A character vector giving labels (must be same length as breaks)

  • A function that takes the breaks as input and returns labels as output

We will use the last option, a function that takes breaks as an argument and returns a number with 2 decimal places.

#Our transformation function
scaleFUN <- function(x) sprintf("%.2f", x)

#Plot
library(ggplot2)
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(. ~ cyl)
p + scale_y_continuous(labels=scaleFUN)

enter image description here


The "scales" package has some nice functions for formatting the axes. One of these functions is number_format(). So you don't have to define your function first.

library(ggplot2)
# building on Pierre's answer
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(. ~ cyl)

# here comes the difference
p + scale_y_continuous(
  labels = scales::number_format(accuracy = 0.01))

# the function offers some other nice possibilities, such as controlling your decimal 
# mark, here ',' instead of '.'
p + scale_y_continuous(
  labels = scales::number_format(accuracy = 0.01,
                                 decimal.mark = ','))

The scales package has been updated, and number_format() has been retired. Use label_number(). This can also be applied to percentages and other continuous scales (ex: label_percent(); https://scales.r-lib.org/reference/label_percent.html).

#updating Rtists answer with latest syntax from scales
library(tidyverse); library(scales)

p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p <- p + facet_grid(. ~ cyl)

# number_format() is retired; use label_number() instead
p + scale_y_continuous(
  labels = label_number(accuracy = 0.01)
)

# for whole numbers use accuracy = 1
p + scale_y_continuous(
  labels = label_number(accuracy = 1)
)