How do I change the formatting of numbers on an axis with ggplot?

后端 未结 5 960
独厮守ぢ
独厮守ぢ 2020-11-28 01:07

I\'m using R and ggplot to draw a scatterplot of some data, all is fine except that the numbers on the y-axis are coming out with computer style exponent formatting, i.e. 4e

相关标签:
5条回答
  • 2020-11-28 01:40
    x <- rnorm(10) * 100000
    y <- seq(0, 1, length = 10)
    p <- qplot(x, y)
    library(scales)
    p + scale_x_continuous(labels = comma)
    
    0 讨论(0)
  • 2020-11-28 01:51

    I'm late to the game here but in-case others want an easy solution, I created a set of functions which can be called like:

     ggplot + scale_x_continuous(labels = human_gbp)
    

    which give you human readable numbers for x or y axes (or any number in general really).

    You can find the functions here: Github Repo Just copy the functions in to your script so you can call them.

    0 讨论(0)
  • 2020-11-28 02:00

    I also found another way of doing this that gives proper 'x10(superscript)5' notation on the axes. I'm posting it here in the hope it might be useful to some. I got the code from here so I claim no credit for it, that rightly goes to Brian Diggs.

    fancy_scientific <- function(l) {
         # turn in to character string in scientific notation
         l <- format(l, scientific = TRUE)
         # quote the part before the exponent to keep all the digits
         l <- gsub("^(.*)e", "'\\1'e", l)
         # turn the 'e+' into plotmath format
         l <- gsub("e", "%*%10^", l)
         # return this as an expression
         parse(text=l)
    }
    

    Which you can then use as

    ggplot(data=df, aes(x=x, y=y)) +
       geom_point() +
       scale_y_continuous(labels=fancy_scientific) 
    
    0 讨论(0)
  • 2020-11-28 02:04

    Another option is to format your axis tick labels with commas is by using the package scales, and add

     scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = comma)
    

    to your ggplot statement.

    If you don't want to load the package, use:

    scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma)
    
    0 讨论(0)
  • 2020-11-28 02:07

    I find Jack Aidley's suggested answer a useful one.

    I wanted to throw out another option. Suppose you have a series with many small numbers, and you want to ensure the axis labels write out the full decimal point (e.g. 5e-05 -> 0.0005), then:

    NotFancy <- function(l) {
     l <- format(l, scientific = FALSE)
     parse(text=l)
    }
    
    ggplot(data = data.frame(x = 1:100, 
                             y = seq(from=0.00005,to = 0.0000000000001,length.out=100) + runif(n=100,-0.0000005,0.0000005)), 
           aes(x=x, y=y)) +
         geom_point() +
         scale_y_continuous(labels=NotFancy) 
    
    0 讨论(0)
提交回复
热议问题