Rでプロットしたときの枠の隅の座標は?
Rでプロットするといい感じに枠と範囲を決めてくれるが、諸般の事情から枠の隅の座標が知りたくて調べたことの覚書。
結論から言えば、デフォルトではplotした範囲(xlim,ylim
で指定した範囲)の4%分の長さを外にとっているっぽい。
プロットしたときに出る枠
Rのplot
とデフォルトでは枠が描かれるが引数のbty
を指定すると枠の線の一部を描いたり描かなかったり指定できる(デフォルトはbyt="o"
)。
さて、この外側の枠なのだが、xlim,ylim
で指定した範囲からいい感じになるように調整して外側に描かれるのだがそこの座標が知りたいのである。
手作業で非効率的に調べる
とりあえず、枠なし軸ありの次のような画像を作る。
そして、segments
関数を使い、軸目盛りにピッタリな線になるように座標を手作業で動かしていく。
そうすると、左下の座標はどうやら0.64, 0.64
であるらしいことがわかった。
plot(c(1:10),c(1:10), xlim=c(1,10),ylim=c(1,10), axes = FALSE) axis(1, at=c(1:10)) axis(2, at=c(1:10)) par(xpd=TRUE) #プロット領域の外にも作図 segments(0.64, 0.64 , 1, 0.64) segments(0.64, 0.64 , 0.64, 1)
範囲からの相対的な距離で実験
この0.64という値はx軸y軸それぞれの最小値から0.36離れた値である。そして0.36という値は,x軸y軸の長さ(上の例だと9)に対して4%の割合である。
ということで、軸の長さを変えてやってみる。例えば次のような値でplot
してみる。
x.min <- -5 x.max <- 10 x.length <- x.max - x.min y.min <- 0 y.max <- 1000 y.length <- y.max - y.min plot(c(1:10),seq(10,100, by=10), xlim=c(x.min, x.max), ylim=c(y.min, y.max), axes=F) axis(1, at=c(x.min:x.max)) axis(2, at=seq(y.min, y.max, by=100))
そして、それぞれの範囲の4%分外側の座標をとり、軸に合流するように線分を引いてみる。
par(xpd=T) segments(x.min - x.length*0.04, y.min - y.length*0.04, x.min, y.min - y.length*0.04) segments(x.min - x.length*0.04, y.min - y.length*0.04, x.min - x.length*0.04, y.min)
そうすると枠の角の座標から軸までの線がひかれた次のような画像が無事にできた。
というわけで、この非効率な実験の結果、デフォルトではplotした範囲(xlim,ylim
で指定した範囲)の4%分の長さを外にとっているっぽいと言えそうである。
(もしかしたら、大いに間違っているかもしれませんが気づいた方は教えてください。)