wind rose(風配図)は cockscomb(鶏頭図)と似ているが,wind rose はおうぎ形の幅が狭く,棒グラフのように*概ね*半径が量を表すと見なせるので,ちょっと違いがある。また,本来は風向・風速を表示するものなので,角度(方向)に意味がある(北風,北北西の風など)ので,これは棒グラフにするよりはそのままの方がわかりやすいであろう(360度は0度に連続するから)。
誤解してはいけない。
ナイチンゲールの鶏頭図は,正しいのだよ(^_^;)
ナイチンゲールの鶏頭図(コウモリの翼)はボンヤリとした画像だなあぐらいにしか思っていない人が多い。
左下に注釈が書いてあるが,明確に "The areas of the blue, red, & black wedges are each measured from the centre as the common vertex." と書かれている。つまり,(中心からの)おうぎ形の面積が量を表すと書いてある。
疑り深い人の為に,この記事の最後に,元のデータがあるので自分で確かめるとよい。
右側の図(1854/04 ~ 1855/03)を R で描いてみる。
df = read.csv("FN.csv")
df$r.diseases = df$diseases / df$total * 12000
df$r.wounds = df$wounds / df$total * 12000
df$r.others = df$others / df$total * 12000
df1 = df[1:12, 7:9]
df1
begin = seq(180, -210, by = -30)
old = par(mar = c(0, 0, 0, 0))
plot(c(-26, 18), c(-32, 16),
type = "n", bty = "n", asp = 1, xlab = "", ylab = "", axes = FALSE)
color = c("aliceblue", "pink", "gray")
for (i in 1:12) {
deg = seq(begin[i], begin[i+1], length.out = 1000) / 180 * pi
for (j in order(df1[i,], decreasing = TRUE)) { # df1[12,] はバグだった
r = sqrt(df1[i, j])
x = c(0, r * cos(deg))
y = c(0, r * sin(deg))
polygon(x, y, col = color[j])
}
}
面積が量を表すということであるから,半径は量の平方根であるということを r = sqrt(df1[i, j]) で指定している。
できあがった図は以下のようになり,ナイチンゲールが描いたものと同じになっている。
さて,鶏頭図はナイチンゲールが最初に発明したものではないという話もあるが,上の図は本当に見やすいだろうか?人間は量を面積で把握する力は低い。それでも「水色の部分がおおきいでしょ!」というナイチンゲールの主張は十分に明確なのだけど,下のような図の方がもっと声高く主張しているのがわかる。
Zymotic diseases は 1855 Jan に最も死亡率が高く 1022.8 である。そのときの Wounds & injuries は 30.7 である。前者は後者の 33 倍である。
鶏頭図の面積を比較して,面積比が 33 倍になっていることを理解することができるだろうか?折れ線グラフだとどうだろうか?
ナイチンゲールの元データ。
Mon Year total diseases wounds others r.diseases r.wounds r.others
1 4 1854 8571 1 0 5 1.400070 0.0000000 7.000350
2 5 1854 23333 12 0 9 6.171517 0.0000000 4.628638
3 6 1854 28333 11 0 6 4.658878 0.0000000 2.541206
4 7 1854 28772 359 0 23 149.728903 0.0000000 9.592660
5 8 1854 30246 828 1 30 328.506249 0.3967467 11.902400
6 9 1854 30290 788 81 70 312.182238 32.0897986 27.731925
7 10 1854 30643 503 132 128 196.978103 51.6920667 50.125640
8 11 1854 29736 844 287 106 340.597256 115.8192090 42.776433
9 12 1854 32779 1725 114 131 631.501876 41.7340370 47.957534
10 1 1855 32393 2761 83 324 1022.813571 30.7473837 120.025932
11 2 1855 30919 2120 42 361 822.795045 16.3006566 140.108024
12 3 1855 30107 1205 32 172 480.286976 12.7545089 68.555485
13 4 1855 32252 477 48 57 177.477366 17.8593576 21.207987
14 5 1855 35473 508 49 37 171.849012 16.5759874 12.516562
15 6 1855 38863 802 209 31 247.639143 64.5343900 9.572087
16 7 1855 42647 382 134 33 107.487045 37.7048796 9.285530
17 8 1855 44614 483 164 25 129.914377 44.1117138 6.724347
18 9 1855 47751 189 276 20 47.496388 69.3598040 5.026073
19 10 1855 46852 128 53 18 32.784086 13.5746606 4.610262
20 11 1855 37853 178 33 32 56.428817 10.4615222 10.144506
21 12 1855 43217 91 18 28 25.267834 4.9980332 7.774718
22 1 1856 44212 42 2 48 11.399620 0.5428390 13.028137
23 2 1856 43485 24 0 19 6.622973 0.0000000 5.243187
24 3 1856 46140 15 0 35 3.901170 0.0000000 9.102731
鶏頭図(PolarArea)
> 鶏頭図(PolarAreaChart)は円グラフと似ていますが、セグメントの角度は同じです。 代わりにセグメントの半径が値によって異なります。
間違いです。
二次元グラフになりますので,半径で値を表すのではなく,面積で値を表さないといけません。
つまり,半径は値の平方根を取ったものでなければならないのです。