このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

関数リファレンスのいいかげんさと謎仕様

こういうの(↓)がけっこう多い。情報量ゼロに近い。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)
}