web-dev-qa-db-ja.com

プロット軸に科学表記法を使用したくない

plotコマンドを使用して、Rであらゆる種類の散布図を定期的に実行します。

場合によっては両方、場合によってはプロット軸の1つだけが科学表記法でラベル付けされます。 Rが科学表記法への切り替えを決定する時期がわかりません。驚くべきことに、プロットにラベルを付けるときに正気の人間が科学的表記法で書くことのない数字を印刷することがよくあります。たとえば、5eを5e + 00とラベル付けします。対数軸が最大1000まであるとします。科学的な表記法は、このような「小さな」数字では不当です。

私はその振る舞いを抑制したい、私は常にRに整数値を表示したい。これは可能ですか?

options(scipen=10)を試しましたが、5の代わりに5.0の書き込みを開始しますが、もう一方の軸では5が5などです。Rプロットで純粋な整数値を取得するにはどうすればよいですか。

Windows 7でR 2.12.1を使用しています。

66
user438602

options(scipen=5)または他の十分に高い数を使用してください。 scipenオプションは、Rが科学表記法に切り替わる可能性を決定します。値が高いほど、Rが切り替わる可能性は低くなります。プロットを作成する前にオプションを設定します。まだ科学表記法がある場合は、より高い数値に設定します。

50
Greg Snow

formatまたはformatCを使用して、軸ラベルをフォーマットできます。

整数については、試してください

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

数値が実際の整数に変換可能な場合(つまり、大きすぎない場合)、使用することもできます

formatC(x, format = "d")

ラベルを軸に付ける方法は、使用しているプロットシステムによって異なります。

18
Richie Cotton

これを試して。あなたが物事を動かすことができるように、私は意図的に様々な部分を壊しました。

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

11
bill_080

そのために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))
11
Joris Meys

lattice を試すことができます:

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

enter image description here

4
Marek

Rgraphicsパッケージには、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パラメーターもありますが、この状況では、適切な対数軸の目盛りの位置を取得するために設定する必要はありません。

1
daniel.neumann