在绘图中使用R科学计数法

8

我有一个简单的情节:

#!/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,就像下面的图一样?

enter image description here

3个回答

12

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

在此输入图像描述


3
这种方法有点取巧,但并没有什么问题: ```html

这是一种取巧的方法,但没有任何问题:

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

谢谢。在绘图标题中使用表达式会更好。https://dev59.com/XG855IYBdhLWcg3wg0nC - Yang

3

如何将标签放在轴上取决于所使用的绘图系统(基础,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. 利用表达式从绘图数学功能中受益...

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

我想你误解了我的问题;我希望1、2、3、4与y轴一起,并使e+06在y轴顶部。 - Yang
不,我完全理解你的需求。我的回答是一般性的,邀请您发现R绘图功能,而不是尝试复制一些MATLAB功能。许多默认的R参数都被优化为轻松提取图表信息。例如,将10^3放入其中会使该图更难以理解,我们不得不每次跟踪一个点时重新缩放... - agstudy
我明白,我将把这写进一篇论文中,节省空间是我的首要任务。 - Yang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接