関数リファレンスのいいかげんさと謎仕様
こういうの(↓)がけっこう多い。情報量ゼロに近い。Rのgridパッケージの凄まじい座標系 - 檜山正幸のキマイラ飼育記 メモ編 も参照。
Description an ellipse grob Usage ellipseGrob(x, y, size = 1, angle = rep(pi/2, length(x)), ar = 1, gp = gpar(colour = "grey50", fill = "grey90"), default.units = "native", size.units = "mm") Arguments x x unit y y unit size size angle angle ar aspec ratio gp gpar default.units default units size.units size units
これは、gridExtraパッケージの例。
関数リファレンス(help)の例には ellipseGrob(1:10/11,1:10/11,size=5,ar=1:5,angle=rnorm(10), def="npc", gp=gpar(fill=grey(1:10/11))) と、リファレンスにない引数defがあって、このdefがないとうまく描けないときてる。
def="npc" を指定しないと、システムデフォルトとは違う座標系で描くようだ。結果が見えない。デフォルトと違う座標系が関数のデフォルトって?? sizeの単位がまた謎で、なにを単位にしているか不明。デフォルトの寸法単位とは著しく違う。
そもそも、楕円なら、「中心のx, y座標、短径の方向と長さ、長径の方向と長さ」にするでしょ。アスペクト比じゃ、斜め方向に伸びた楕円が描けないし、ほんとにひどいわ。
Rってプログラミング言語よりはツール環境だから、実用性重視はしょうがないけど、ライブラリで設計がマズイのあるなー。CRANは玉石混交なんだろうけど。
[追記]
http://www.amstat.org/publications/jse/v18n3/zhou.pdf の付録に gird.mirror という関数があって、それを使って楕円を定義している。ちなみに以下はPDFからのコピーで、文字「^」がイリーガルだとRに言われて修正したもの。
ellipse <- function (w=1/10, h, angle, xrange = c(0, 1), yrange = c(0,1), default.units = "native", vp = viewport(xscale = xrange, yscale = yrange, height=h, width=w, angle=angle), gp1 = NULL, gp2 = NULL, name = NULL) { grid.mirror(0.5 + sqrt(0.5^2 - (0.5 - x)^2), 0, 1, default.units = default.units, return = FALSE, vp = vp, gp1 = gp1, gp2 = gp2, name = name) }