2014/07/31
R
 >  ベクトルを円周上に並べる
実行環境は 2014/07/28 を参照。rainbow(20) で作った昨日のカラーチャート ↓ の両端は同じ赤系統なので、本来は一直線でなく円環状にぐるぐる回るのが自然。任意のベクトルを円形に並べる基本としてやってみた。


↓ 円形なので切りよく36点で作成。極座標から直交座標に変換する式 (x,y) = (r*cosθ, r*sinθ) を使い、元ベクトルの添字 1〜36 を θ の 0〜2π ラジアンに均等に割り当てた。
wid = 400
hgt = 400

windows(height=(hgt-7.5)/96, width=(wid-7.5)/96)
par(plt=rep(c(5, 95), 2)/100, xaxs='i', yaxs='i', xpd=NA)
plot(asp=1, axes=F, x=0:1, y=0:1, type='n', xlab='', ylab='')

len = 36
col = rainbow(len)

cen = rep(0.5, 2)
rad = 0.5
vec = seq(0, 2 * pi, length=len+1)
x = rad * cos(vec) + cen[1]
y = rad * sin(vec) + cen[2]
points(x, y, cex=3, bg=col, col=1, pch=21)


上のコードに続けて、少し内側にベクトルの添字を書き込む。↓
rad = 0.43
vec = seq(0, 2 * pi, length=len+1)
x = rad * cos(vec) + cen[1]
y = rad * sin(vec) + cen[2]
text(x, y, label=1:len)


添字 1 から反時計回りに θ が開き、一回転して 36 で終わる。rainbow() の色が確かに循環しているのが分かる。6 → 7 → 8 の黄色を挟む変化が、他に比べて滑らかでない。

↓ もう一つ例。12個の点で、円の中心からの線を追加。
wid = 300
hgt = 300
windows(height=(hgt-7.5)/96, width=(wid-7.5)/96)
par(plt=rep(c(5, 95), 2)/100, xaxs='i', yaxs='i', xpd=NA)
plot(asp=1, axes=F, x=0:1, y=0:1, type='n', xlab='', ylab='')

len = 12
col = rainbow(len)

cen = rep(0.5, 2)
rad = 0.5
vec = seq(0, 2 * pi, length=len+1)
x = rad * cos(vec) + cen[1]
y = rad * sin(vec) + cen[2]
points(x, y, cex=3, bg=col, col=1, pch=21)

rad = 0.4
vec = seq(0, 2 * pi, length=len+1)
x = rad * cos(vec) + cen[1]
y = rad * sin(vec) + cen[2]
text(x, y, label=1:len)

rad = 0.35
vec = seq(0, 2 * pi, length=len+1)
x = rad * cos(vec) + cen[1]
y = rad * sin(vec) + cen[2]
segments(cen[1], cen[2], x, y, col='gray', lty=1)


先の36個の画面にも中心からの線を加えると、中心部分が込みいって変な模様になり気持ち悪い、というか怖い。点線にしたりすると更に。試したのが昼間でよかった。
<< Octava で中心極限定理
簡易カラーチャート作成機として使う >>
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。