猫も杓子も構造化

発達障害、特別支援などについて書いています。最近は心理学関係の内容が多めです。

Rでプロットしたときの枠の隅の座標は?

Rでプロットするといい感じに枠と範囲を決めてくれるが、諸般の事情から枠の隅の座標が知りたくて調べたことの覚書。

結論から言えば、デフォルトではplotした範囲(xlim,ylimで指定した範囲)の4%分の長さを外にとっているっぽい。

プロットしたときに出る枠

Rのplotとデフォルトでは枠が描かれるが引数のbtyを指定すると枠の線の一部を描いたり描かなかったり指定できる(デフォルトはbyt="o")。

f:id:nekomosyakushimo:20180813113049p:plain f:id:nekomosyakushimo:20180813113236p:plain f:id:nekomosyakushimo:20180813113233p:plain

さて、この外側の枠なのだが、xlim,ylimで指定した範囲からいい感じになるように調整して外側に描かれるのだがそこの座標が知りたいのである。

f:id:nekomosyakushimo:20180813113406p:plain

手作業で非効率的に調べる

とりあえず、枠なし軸ありの次のような画像を作る。

f:id:nekomosyakushimo:20180813113302p:plain

そして、segments関数を使い、軸目盛りにピッタリな線になるように座標を手作業で動かしていく。

そうすると、左下の座標はどうやら0.64, 0.64であるらしいことがわかった。

f:id:nekomosyakushimo:20180813113230p:plain

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))

f:id:nekomosyakushimo:20180813113305p:plain

そして、それぞれの範囲の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)

そうすると枠の角の座標から軸までの線がひかれた次のような画像が無事にできた。

f:id:nekomosyakushimo:20180813113230p:plain

というわけで、この非効率な実験の結果、デフォルトではplotした範囲(xlim,ylimで指定した範囲)の4%分の長さを外にとっているっぽいと言えそうである。

(もしかしたら、大いに間違っているかもしれませんが気づいた方は教えてください。)