【问题标题】:R scientific notation in plots图中的 R 科学记数法
【发布时间】:2013-06-27 12:52:32
【问题描述】:

我有一个简单的情节:

#!/usr/bin/Rscript                                                                                    

png('plot.png')

y <- c(102, 258, 2314)                                                                         
x <- c(482563, 922167, 4462665)

plot(x,y)
dev.off()

R 使用 500、1000、1500 等作为 y 轴。有没有办法可以对y 轴使用科学计数法并将* 10^3 放在轴的顶部,如下图所示?

【问题讨论】:

    标签: r plot scientific-notation


    【解决方案1】:

    类似的技术是使用sfsmisc 包中的eaxis(扩展/工程轴)。

    它是这样工作的:

    library(sfsmisc)
    
    x <- c(482563, 922167, 4462665)
    y <- c(102, 258, 2314)
    
    plot(x, y, xaxt="n", yaxt="n")
    
    eaxis(1)  # x-axis
    eaxis(2)  # y-axis
    

    【讨论】:

      【解决方案2】:

      如何将标签放在轴上取决于使用的绘图系统。(base、ggplot2 或 lattice) 您可以使用 scales 包中的函数来格式化您的轴号:

      library(scales)
      x <- 10 ^ (1:10)
      scientific_format(1)(x)
      [1] "1e+01" "1e+02" "1e+03" "1e+04" "1e+05" "1e+06" "1e+07" "1e+08" "1e+09" "1e+10"
      

      这里是使用ggplot2 的示例:

      library(ggplot2)
      dat <- data.frame(x  = c(102, 258, 2314),                                                                     
                        y  = c(482563, 922167, 4462665))
      
      qplot(data=dat,x=x,y=y) + 
        scale_y_continuous(label=scientific_format(digits=1))+ 
        theme(axis.text.y =element_text(size=50))
      

      编辑 OP 有特定的需求。为了实现这一点,我在这里使用了一些想法:

      1. 您可以使用 axis 函数自定义绘图标签。
      2. 使用mtext 将文本放在外部绘图区域中
      3. 使用表达式从绘图功能中获利...

      y <- c(102, 258, 2314)                                                                         
      x <- c(482563, 922167, 4462665)
      plot(x,y,ylab='',yaxt='n')
      mtext(expression(10^3),adj=0,padj=-1,outer=FALSE)
      axis(side=2,at=y,labels=round(y/1000,2))
      

      【讨论】:

      • 我猜你误解了我的问题;我希望 1、2、3、4 与 y 轴和 e+06 位于 y 轴的顶部。
      • 不,我完全理解您的需求。我的回答很笼统,邀请您发现 R 绘图功能,而不是尝试重现某些 MATLAB 功能。许多默认的 R 参数经过优化,可以轻松地从图中提取信息。例如放置 10^3,使情节更难理解,我们必须在每次跟随一个点时重新缩放......
      • 我明白了,我要把它写在纸上,节省空间是我的首要任务。
      【解决方案3】:

      这是一种很老套的方式,但并没有什么问题:

      plot(x,y/1e3, ylab="y /10^3")
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2021-05-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多