How to accurately display SI prefix for numbers in y-axis scale of plot made with ggplot2 in R?

后端 未结 1 830
一个人的身影
一个人的身影 2021-01-18 01:26

I have the following plot, generated using this code

plt <- ggplot(d2, aes_string(x=names(same_df)[1],y= \"value\")) + 
    geom_point(aes(color = variabl         


        
相关标签:
1条回答
  • 2021-01-18 02:02

    I was not able to reproduce your behaviour. See this:

    df <- data.frame(x=runif(100), y=(runif(100)-1/2)/1e8)
    p <- ggplot(df, aes(x, y)) + geom_point()
    p + scale_y_continuous(labels=f2si)
    

    enter image description here

    I have also found another similar function, if you don't like "0 n" label:

      format_si <- function(...) {
      # Based on code by Ben Tupper
      # https://stat.ethz.ch/pipermail/r-help/2012-January/299804.html
    
      function(x) {
        limits <- c(1e-24, 1e-21, 1e-18, 1e-15, 1e-12,
                    1e-9,  1e-6,  1e-3,  1e0,   1e3,
                    1e6,   1e9,   1e12,  1e15,  1e18,
                    1e21,  1e24)
        prefix <- c("y",   "z",   "a",   "f",   "p",
                    "n",   "µ",   "m",   " ",   "k",
                    "M",   "G",   "T",   "P",   "E",
                    "Z",   "Y")
    
        # Vector with array indices according to position in intervals
        i <- findInterval(abs(x), limits)
    
        # Set prefix to " " for very small values < 1e-24
        i <- ifelse(i==0, which(limits == 1e0), i)
    
        paste(format(round(x/limits[i], 1),
                     trim=TRUE, scientific=FALSE, ...),
              prefix[i])
      }
    }
    
    p + scale_y_continuous(labels=format_si())
    

    enter image description here

    0 讨论(0)
提交回复
热议问题