Rのグラフで軸の目盛りの刻み幅を変更する方法
Rでplotなどを使ってグラフを描くとき、x軸やy軸の目盛りは勝手に調整してくれて、大抵の場合はそれで問題ないのですが、たまにちょっと変えたい時があります。そのたびに必死で検索して調べているような気がするので、ここに書き留めておきます。
(最初の方の例はcurve関数を使ってますが、plot関数でも同様の方法でいけます)
もちろん、特に指定しなくても、目盛りと目盛りのラベル(例えば、x軸の -4, -2, 0, 2, 4)は書いてくれます↓
# 目盛りの幅に関しては指定しない
curve(dnorm, xlim=c(-4,4))
上記では、2刻みになっていますが、例えば、1刻みにしたいなあという場合↓
# -4から4までを8区間に分ける(1刻み)
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 8))
さらに刻みを細かくして0.5にしてみましたが、目盛りのラベルは適宜間引かれてしまうようです↓(作図領域を横に伸ばせばラベルが表示されるようになります)
# 16区間に分けると0.5刻みになるが
# すべての目盛りに数値ラベルが書かれるわけではない
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 16))
いくつに分割するかちゃんと考えないと、↓こんなことになることも・・・
# 8の幅を9で割るとか・・・
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 9))
次は違うやり方。
最初は軸の目盛りを書かないようにしておいて、あとから、axis関数をつかって目盛りを書き足すという方法です↓
curve(dnorm, xlim=c(-4, 4), xaxt="n") # 最初は目盛りを書かない
axis(side=1, at=-4:4) # atに目盛りをベクトルで指定する
side=1というのがx軸の意味で、y軸に追記したい場合はside=2と指定すればOK。
xaxpでの指定は等間隔でしたが、axisのatでの指定は目盛り位置を列挙するような形ですので、任意の間隔で目盛りをつけることが可能です。
こんないいかげんな刻み幅も↓
# axis関数なら等間隔でない目盛りもいけちゃう
curve(dnorm, xlim=c(-4, 4), xaxt="n")
axis(side=1, at=c(-4, -2, 1, 2.5, 3.2))
上記はcurve関数の例でしたが、plot関数でも同様です↓
f <- function(x){dnorm(x)}
plot(f, xlim=c(-4, 4), xaxp=c(-4, 4, 8))
f <- function(x){dnorm(x)}
plot(f, xlim=c(-4, 4), xaxt="n")
axis(side=1, at=-4:4)
デフォルトの目盛り刻みで問題ない場合がほとんどでしょうから、滅多に使わない機能かなあと思います。滅多に使わないがゆえに、やり方を忘れてしまうというジレンマ。
(最初の方の例はcurve関数を使ってますが、plot関数でも同様の方法でいけます)
もちろん、特に指定しなくても、目盛りと目盛りのラベル(例えば、x軸の -4, -2, 0, 2, 4)は書いてくれます↓
指定しなくても目盛りは表示される |
curve(dnorm, xlim=c(-4,4))
上記では、2刻みになっていますが、例えば、1刻みにしたいなあという場合↓
目盛りが1刻みになるように指定 |
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 8))
さらに刻みを細かくして0.5にしてみましたが、目盛りのラベルは適宜間引かれてしまうようです↓(作図領域を横に伸ばせばラベルが表示されるようになります)
目盛りが0.5刻みになるように指定 |
# すべての目盛りに数値ラベルが書かれるわけではない
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 16))
いくつに分割するかちゃんと考えないと、↓こんなことになることも・・・
割り切れないところに目盛りがきてしまう例 |
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 9))
次は違うやり方。
最初は軸の目盛りを書かないようにしておいて、あとから、axis関数をつかって目盛りを書き足すという方法です↓
axis関数で目盛りを後から追記したもの(見た目おんなじだけど・・・) |
axis(side=1, at=-4:4) # atに目盛りをベクトルで指定する
side=1というのがx軸の意味で、y軸に追記したい場合はside=2と指定すればOK。
xaxpでの指定は等間隔でしたが、axisのatでの指定は目盛り位置を列挙するような形ですので、任意の間隔で目盛りをつけることが可能です。
こんないいかげんな刻み幅も↓
こんな目盛りのグラフはイヤだ |
curve(dnorm, xlim=c(-4, 4), xaxt="n")
axis(side=1, at=c(-4, -2, 1, 2.5, 3.2))
上記はcurve関数の例でしたが、plot関数でも同様です↓
関数を定義したあと、plotで描いたもの(xaxp使用) |
plot(f, xlim=c(-4, 4), xaxp=c(-4, 4, 8))
関数を定義したあと、plotで描いたもの(axis使用) |
plot(f, xlim=c(-4, 4), xaxt="n")
axis(side=1, at=-4:4)
デフォルトの目盛り刻みで問題ない場合がほとんどでしょうから、滅多に使わない機能かなあと思います。滅多に使わないがゆえに、やり方を忘れてしまうというジレンマ。
非常にわかりやすい記述でありがたいです。本当にこんな情報を探していました。ありがとうございました。
返信削除