我经常使用plot
命令在R中执行各种散点图。
有时两者,有时只有一个绘图轴用科学记数法标记。我不明白何时R决定改用科学记数法。令人惊讶的是,它通常会在标记绘图时打印出人类不会用科学记数法书写的数字,例如它将5标记为5e + 00。假设您的对数轴上升到1000,科学符号对于这样的“小”数字是不合理的。
我想抑制那种行为,我总是希望R显示整数值。这可能吗?
我尝试options(scipen=10)
但是它开始写5.0而不是5,而在另一个轴5仍然是5等。我怎样才能在我的R图中有纯整数值?
我在Windows 7上使用R 2.12.1。
答案 0 :(得分:47)
使用options(scipen=5)
或其他足够高的数字。 scipen选项确定R切换到科学记数法的可能性,值越高,切换的可能性越小。在制作绘图之前设置选项,如果仍有科学记数法,请将其设置为更高的数字。
答案 1 :(得分:16)
您可以使用format
或formatC
来格式化轴标签。
对于整数,请尝试
x <- 10 ^ (1:10)
format(x, scientific = FALSE)
formatC(x, digits = 0, format = "f")
如果数字可转换为实际整数(即不太大),您也可以使用
formatC(x, format = "d")
如何将标签放到轴上取决于您使用的绘图系统。
答案 2 :(得分:11)
您可以使用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)
给出:
编辑:如果你想让所有这些格式都相同,你可以使用@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))
答案 3 :(得分:11)
试试这个。我故意打破各个部分,以便你可以移动。
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")
答案 4 :(得分:4)
您可以尝试lattice:
require(lattice)
x <- 1:100000
y <- 1:100000
xyplot(y~x, scales=list(x = list(log = 10)), type="l")
答案 5 :(得分:0)
R
graphics
包具有函数axTicks
,该函数返回axis
和plot
函数自动设置的刻度线的刻度位置。给出这个问题的其他答案定义了手动的刻度位置,这在某些情况下可能不方便。
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'))
log
函数中还有一个axTicks
参数,但在这种情况下,不需要设置它来获得正确的对数轴刻度位置。
答案 6 :(得分:-1)
通常设置变量的轴极限@max
a <- c(0:1000000)
b <- c(0:1000000)
plot(a, b, ylim = c(0, max(b)))