Force R to stop plotting abbreviated axis labels - e.g. 1e+00 in ggplot2

RGraphGgplot2Axes

R Problem Overview


In ggplot2 how can I stop axis labels being abbreviated - e.g. 1e+00, 1e+01 along the x axis once plotted? Ideally, I want to force R to display the actual values which in this case would be 1,10.

Any help much appreciated.

R Solutions


Solution 1 - R

I think you are looking for this:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

Solution 2 - R

Did you try something like :

options(scipen=10000)

before plotting ?

Solution 3 - R

Just an update to what @Arun made, since I tried it today and it didn't work because it was actualized to

+ scale_x_continuous(labels = scales::comma)

Solution 4 - R

As a more general solution, you can use scales::format_format to remove the scientific notation. This also gives you lots of control around how exactly you want your labels to be displayed, as opposed to scales::comma which only does comma separations of the orders of magnitude.

For example:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

Solution 5 - R

There is a solution that don't require scales library.

You can try:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

Solution 6 - R

Extending the original question to comprise fractions as well, i.e. 1, 0.1, 0.01, 0.001 etc. and avoiding trailing zeros

p + scale_x_continuous(labels = function(x) sprintf("%g", x))

Solution 7 - R

Isn't the simplest general solution to set the penalty that R uses for scientific notation higher?

i.e set scipen() to a number that you are comfortable with.

e.g. If your axis maximum on charts is likely to be 100 000, setting scipen(200000) will ensure that R (and ggplot) will use standard notation for all numbers below 200000 and there will be no requirement to add any lines to the ggplot function.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJPDView Question on Stackoverflow
Solution 1 - RArunView Answer on Stackoverflow
Solution 2 - RjubaView Answer on Stackoverflow
Solution 3 - RDerek CorcoranView Answer on Stackoverflow
Solution 4 - Ruser2739472View Answer on Stackoverflow
Solution 5 - RWillian AdamczykView Answer on Stackoverflow
Solution 6 - RmdeleeuwView Answer on Stackoverflow
Solution 7 - RAndrew FraserView Answer on Stackoverflow