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的顶部,如下图所示?

在此处输入图像描述

4

3 回答 3

11

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

在此处输入图像描述

于 2014-01-23T03:05:39.133 回答
3

这是一种 hacky 方式,但它没有任何问题:

plot(x,y/1e3, ylab="y /10^3")
于 2013-06-30T04:07:23.843 回答
3

如何将标签放在轴上取决于使用的绘图系统。(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))
于 2013-06-30T04:09:04.840 回答