R图中的科学记数法

时间:2013-06-30 03:35:23

标签: r plot scientific-notation

我有一个简单的情节:

#!/usr/bin/Rscript                                                                                    

png('plot.png')

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

plot(x,y)
dev.off()

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

enter image description here

3 个答案:

答案 0 :(得分:9)

类似的技术是使用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

enter image description here

答案 1 :(得分:3)

这有点像hacky,但它并没有错:

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

答案 2 :(得分: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))

enter image description here

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

  1. 您可以使用axis功能自定义地图标签。
  2. 使用mtext将文字放在外部地块区域
  3. 使用表达式从plotmath功能中获益......
  4. enter image description here

    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))