No.13047 Re: 重複している座標のcexを制御する方法 【青木繁伸】 2010/07/14(Wed) 10:02
泥臭い方法ですが,以下のようにしても実行時間は無視できる程度です。
データが小数点付きの場合でもかまいません。矢印表示の場合は,標本サイズが大きくなると見にくくなりますね。
なお,散布図の場合には,円の面積が度数に比例するようにした方がよいですね。x <- c(17, 16, 21, 21, 17, 14, 18, 15, 23, 19, 21, 14, 20, 21, 15,
28, 22, 23, 19, 19, 23, 22, 20, 30, 26, 20, 14, 20, 21, 20, 16,
23, 29, 6, 16, 21, 16, 14, 18, 22, 22, 24, 20, 11, 20, 27, 26,
18, 16, 27, 23, 26, 19, 20, 16, 17, 18, 28, 30, 25, 23, 23, 19,
17, 25, 16, 15, 28, 7, 26, 16, 20, 21, 20, 20, 10, 25, 28, 18,
11, 18, 21, 19, 26, 30, 26, 18, 20, 20, 16, 24, 18, 22, 16, 10,
22, 27, 15, 22, 13)
y <- c(19, 18, 11, 21, 15, 19, 19, 12, 15, 14, 19, 18, 11, 13, 20,
13, 8, 15, 15, 16, 13, 9, 15, 8, 14, 12, 20, 14, 21, 13, 10,
15, 3, 24, 16, 20, 16, 14, 13, 21, 15, 12, 16, 17, 17, 11, 13,
12, 15, 8, 18, 16, 13, 14, 15, 18, 16, 14, 15, 15, 11, 15, 15,
17, 6, 18, 13, 7, 24, 14, 19, 14, 15, 19, 20, 14, 14, 13, 18,
23, 10, 14, 17, 8, 9, 14, 16, 20, 15, 15, 14, 16, 18, 20, 20,
13, 9, 14, 13, 22)
tbl <- table(x, y)
nx <- nrow(tbl)
ny <- ncol(tbl)
vx <- as.numeric(rownames(tbl))
vy <- as.numeric(colnames(tbl))
layout(matrix(1:2, 1))
plot(c(0, max(x)), c(0, max(y)), type="n", xlab="x", ylab="y")
for (i in 1:nx) {
for (j in 1:ny) {
if (tbl[i, j] > 0) points(vx[i], vy[j], cex=sqrt(tbl[i, j]))
}
}
plot(c(0, max(x)), c(0, max(y)), type="n", xlab="x", ylab="y")
for (i in 1:nx) {
for (j in 1:ny) {
if (tbl[i, j] > 0) arrows(0, 0, vx[i], vy[j], lwd=tbl[i, j])
}
}
layout(1)
No.13050 Re: 重複している座標のcexを制御する方法 【波音】 2010/07/14(Wed) 15:08
早速の回答ありがとうございました!!
table()で集計して,その行ラベルと列ラベルをas.numeric()でnumeric型に変換したものを利用するのですね。あとは二重ループで順々に大きさを割り当てて描いていく,と。
元々,たくさんのデータを対象としていないので実行時間については問題にならなそうです(^_^;) とはいえ,大きさ(太さ)を少し工夫しないと見難いだけの図になりかねないので,気をつける必要がありそうです。
● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る