Rのgridパッケージの凄まじい座標系
デバイス矩形(ウィンドウの描画領域)とビューポート矩形(仮想的な四角)がある。
いかなる場合でもデバイス矩形の座標値の範囲は 0≦x≦1, 0≦y≦1。これは矩形が正方形であることを意味しない。矩形の物理的なアスペクト比にあうように伸縮される。つまり、座標値の領域は [0, 1]×[0, 1]だが、空間側は任意なので、空間におけるx座標とy座標のスケールは異なる。1単位に含まれるピクセル数は縦と横で違う。そして、寸法単位はx軸のスケールに合わせる。概念的には、x軸方向の単位は固定であり、y軸の単位が自由にスケールするが物理的な空間は不変で縦横均質。
原点は左下で、y軸も下から上に向く。もう、なんという非直感的な座標系なんだ。
次がテストに使える。
# 半径0.25の円を描く circ <- function(x, y, cc=0) { col<- if(cc == 0) "black" else "red"; grid.circle(x=x, y=y, r=0.25, gp=gpar(fill=col)) }
複数の点を指定して、それらを順に結ぶ折れ線を描く。Rらしいといえばそうだが、引数は、
- grid.lines(x座標達のベクトル, y座標達のベクトル)
最初は戸惑う。
axes <- function() { # ビューポートに枠を付ける grid.rect(gp=gpar(lty="dashed")) # 座標軸の十文字と斜め線「/」を描く grid.lines(c(0.01, 0.99), c(0.5, 0.5)) grid.lines(c(0.5, 0.5), c(0.01, 0.99)) grid.lines(c(0.01, 0.99), c(0.01, 0.99)) }
とりあえず描く。
library(grid) axes() circ(0, 0)
[追記]
どうかしてるぜ!
ビューポート生成時の仕様は、viewport(x=x, y=y, width=w, height=h) だが、想像を絶する引数。
- xは新しいビューポートの中心(左下や右上ではない、矩形の中心位置)の親座標系によるx座標。
- xは新しいビューポートの中心の親座標系によるy座標。
- widthは新しいビューポートの幅の親矩形の幅との比率
- heightは新しいビューポートの高さの親矩形の高さとの比率
それにも関わらず、マニュアルの説明は:
x A numeric vector or unit object specifying x-location. y A numeric vector or unit object specifying y-location. width A numeric vector or unit object specifying width. height A numeric vector or unit object specifying height.
ほんとうにありがとうございます。
どうしたらこんなふうになるんだ? 信じられない。