不要把科学记数法放在图轴上

我经常使用 plot命令在 R 中绘制各种散点图。

有时两者都有,有时只有一个图轴是用科学记数法标注的。我不明白 R 什么时候决定改用科学记数法。令人惊讶的是,它经常打印出一些数字,这些数字是任何正常人在标记一个情节时都不会用科学记数法写的,例如,它标记5为5 e + 00。假设你有一个对数轴到1000,这么小的数字是不合理的科学记数法。

我想要抑制这种行为,我总是想要 R 显示整数值。这可能吗?

我尝试了 options(scipen=10),但是它开始写5.0而不是5,而在另一个轴5仍然是5等等。如何在 R 图中使用纯整数值?

我在 Windows 7上使用的是 R 2.12.1。

130226 次浏览

您可以使用 formatformatC格式化轴标签。

对于整数,试试看

x <- 10 ^ (1:10)
format(x, scientific = FALSE)
formatC(x, digits = 0, format = "f")

如果这些数字可以转换为实际的整数(例如,不要太大) ,您还可以使用

formatC(x, format = "d")

如何将标签放到轴上取决于所使用的绘图系统。

你可以使用 axis()命令,例如:

x <- 1:100000
y <- 1:100000
marks <- c(0,20000,40000,60000,80000,100000)
plot(x,y,log="x",yaxt="n",type="l")
axis(2,at=marks,labels=marks)

提供:

enter image description here

编辑: 如果你想让它们都采用相同的格式,你可以使用@Richie 的解决方案来获得它们:

x <- 1:100000
y <- 1:100000
format(y,scientific=FALSE)
plot(x,y,log="x",yaxt="n",type="l")
axis(2,at=marks,labels=format(marks,scientific=FALSE))

你可以试试 格子:

require(lattice)
x <- 1:100000
y <- 1:100000
xyplot(y~x, scales=list(x = list(log = 10)), type="l")

enter image description here

使用 options(scipen=5)或其他一些足够高的数字。Scipen 选项决定了 R 切换到科学记数法的可能性,值越高,切换的可能性就越小。设置选项之前,使你的阴谋,如果它仍然有科学记数法,设置为一个更高的数字。

试试这个,我故意把各个部分分开这样你就可以移动东西了。

library(sfsmisc)


#Generate the data
x <- 1:100000
y <- 1:100000


#Setup the plot area
par(pty="m", plt=c(0.1, 1, 0.1, 1), omd=c(0.1,0.9,0.1,0.9))


#Plot a blank graph without completing the x or y axis
plot(x, y, type = "n", xaxt = "n", yaxt="n", xlab="", ylab="", log = "x", col="blue")
mtext(side=3, text="Test Plot", line=1.2, cex=1.5)


#Complete the x axis
eaxis(1, padj=-0.5, cex.axis=0.8)
mtext(side=1, text="x", line=2.5)


#Complete the y axis and add the grid
aty <- seq(par("yaxp")[1], par("yaxp")[2], (par("yaxp")[2] - par("yaxp")[1])/par("yaxp")[3])
axis(2, at=aty, labels=format(aty, scientific=FALSE), hadj=0.9, cex.axis=0.8, las=2)
mtext(side=2, text="y", line=4.5)
grid()


#Add the line last so it will be on top of the grid
lines(x, y, col="blue")

enter image description here

通常设置轴限制@max 的变量就足够了

a <- c(0:1000000)
b <- c(0:1000000)


plot(a, b, ylim = c(0, max(b)))

R graphics包包含函数 axTicks,它返回的滴答位置是 axisplot函数将自动设置的。对这个问题给出的其他答案手动定义蜱位置,在某些情况下可能不方便。

myTicks = axTicks(1)
axis(1, at = myTicks, labels = formatC(myTicks, format = 'd'))

最简单的例子是

plot(10^(0:10), 0:10, log = 'x', xaxt = 'n')
myTicks = axTicks(1)
axis(1, at = myTicks, labels = formatC(myTicks, format = 'd'))

axTicks函数中也有一个 log参数,但是在这种情况下不需要设置它来获得正确的对数轴刻度位置。