2014年9月16日火曜日

Rのグラフで軸の目盛りの刻み幅を変更する方法

Rでplotなどを使ってグラフを描くとき、x軸やy軸の目盛りは勝手に調整してくれて、大抵の場合はそれで問題ないのですが、たまにちょっと変えたい時があります。そのたびに必死で検索して調べているような気がするので、ここに書き留めておきます。

(最初の方の例はcurve関数を使ってますが、plot関数でも同様の方法でいけます)

もちろん、特に指定しなくても、目盛りと目盛りのラベル(例えば、x軸の -4, -2, 0, 2, 4)は書いてくれます↓
指定しなくても目盛りは表示される
# 目盛りの幅に関しては指定しない
curve(dnorm, xlim=c(-4,4))


上記では、2刻みになっていますが、例えば、1刻みにしたいなあという場合↓
目盛りが1刻みになるように指定
# -4から4までを8区間に分ける(1刻み)
curve(dnorm, xlim=c(-4, 4), xaxp=c(-4, 4, 8))


さらに刻みを細かくして0.5にしてみましたが、目盛りのラベルは適宜間引かれてしまうようです↓(作図領域を横に伸ばせばラベルが表示されるようになります)
目盛りが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関数をつかって目盛りを書き足すという方法です↓
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関数でも同様です↓
関数を定義したあと、plotで描いたもの(xaxp使用)
f <- function(x){dnorm(x)}
plot(f, xlim=c(-4, 4), xaxp=c(-4, 4, 8))

関数を定義したあと、plotで描いたもの(axis使用)
f <- function(x){dnorm(x)}
plot(f, xlim=c(-4, 4), xaxt="n")
axis(side=1, at=-4:4)

デフォルトの目盛り刻みで問題ない場合がほとんどでしょうから、滅多に使わない機能かなあと思います。滅多に使わないがゆえに、やり方を忘れてしまうというジレンマ。




1 件のコメント:

  1. 非常にわかりやすい記述でありがたいです。本当にこんな情報を探していました。ありがとうございました。

    返信削除