第19回 Fundamentals of Data Visualization 読書会 要約

# 本記事の位置付け

下記読書会のための要約です。

https://gaisaba.connpass.com/event/321817/


## 課題図書

https://clauswilke.com/dataviz/directory-of-visualizations.html

この記事に出てくる図は、特に断りのない限り上記ページより引用したものです。


::: note
この書式での注記は、このブログの筆者（さの）の感想です。
:::

::: note warn
この書式での注記は、このブログの筆者（さの）の感想のうち、わからなかった部分や、ちょっと気をつけたほうがいいなと思った点です。
:::

## 今回の範囲

20 Redundant coding

20章 - 表現の冗長化

# 要約

19章で色について扱ったが、色は様々な点で万能ではない。
色に完全に頼ることなく、色を補助的に使うことをこの章で 表現の冗長化 として扱う。

## 20.1 凡例の表現を冗長化する

### 散布図

散布図のグループ分けを点の色だけで行っているケースはよくあるが、色がわからないとグループが全くわからないという点でこれは良くない。
以下のグラフは、 Iris virginica と Iris versicolor の区別がつきづらいし、もし両者の点の位置がもっとごちゃ混ぜだったらもっと見分けがつきづらいという点で良くない。

![iris-scatter-one-shape-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/b232cabb-2d44-4e53-3c67-844cfe60cb17.png)


:::note warn
散布図の色分けめっちゃやってた。。。
今回は virginica と versicolor の色が似ているからダメという論点も出されているが、もっとハッキリ違う色なら良いということ？？
:::

意外にも、この色分け（青と緑）は、赤と緑が見分けづらい人にとっては cvd がない人より見分けやすいのだが、青が見えない人にとってはかなり見分けづらい。

グレースケールで印刷するとほぼ見分けがつかない。

![iris-scatter-one-shape-cvd-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/5907967b-b909-beae-845a-c820242531ca.png)

かんたんな解決策が2つある。

ひとつは Iris setosa　と Iris versicolor の色を入れ替えること。
そうすると、緑と青が直接隣り合うことがなくなる。

:::note warn
この解決策のことを、著者は本当に解決策だと思っているのだろうか。
複数のグラフで色の一貫性を持たせたい場合などに、グラフのプロット結果に依存する色の振り分けをするのはあんまり良くないんじゃないかと思うのですが。。。
:::

もうひとつの解決策は、プロットの点の形を変えること。こうすると、どのタイプの色覚障害を持っている人でも見分けられるし、グレースケールになっても見分けがつく。

![iris-scatter-three-shapes-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/842f4e29-42d3-c451-dbcf-ca49fac8503f.png)

![iris-scatter-three-shapes-cvd-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d554126d-9f8a-5912-8aa2-7668bac79b53.png)


### 散布図以外のグラフ

ポイントの形を変えることは、散布図以外のグラフではうまくいくとは限らない。

たとえば線グラフで様々な幅の点線を使い分けるようなやりかたは、線が直線のときや曲がりがゆるやかなときにしかうまくいかないし、凡例と線の形（色）を照合するのに頭を使わせてしまう。

![tech-stocks-bad-legend-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/e3829875-125d-ae82-3a1a-d3a0092eeed4.png)

上記のグラフは cvd フレンドリーなパレットを使っているので問題なさそうに見えるかもしれないが、そうではない。

グラフには明らかに Facebook を最上位とする序列があるのに、凡例がアルファベット順になっており、グラフの序列と合わないためだ。

これは、凡例を自動生成するツールを使った場合によく起こる。自動生成された凡例は、グラフの数字の序列を見ていないためだ。

凡例の順序を手動で入れ替えることにより、この問題が解決できる。

以下のように、判例の順序をグラフの順序に合わせるだけで、かなり読みやすくなる。

![tech-stocks-good-legend-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/84f602d0-f047-c1cb-007c-a3ca5efd4339.png)

つまり教訓として、 **可視化されたデータに明らかな序列があるなら、凡例の順番をそれに合わせて並べ替えろ**。

:::note
seaborn や ggplot のライブラリで、この機能をパラメータ的に実装する人出てこないかな。。。
グラフの右側 or 左側 or 平均 などを指定して、その順で判例を並べ替える的なパラメータ。
（言うのはかんたん）
:::

データの序列と凡例の順序を合わせることはいつでも力を発揮するが、cvdのことを考慮すると、この利点はさらに浮き彫りになる。
青と黄色が見分けられない色覚障がいの方（tritanomaly）には、Alphabet と Microsoft の緑っぽい色が見分けがつきづらいが、順序のおかげで見分けることができる。

グレイスケールにした場合は Facebook と Alphabet の見分けがつきづらいが、順序のおかげで、一番上が Facebook で二番目が Alphabet だと正しく推定できる。

## 20.2 凡例なしでグラフを作る

表現の冗長化によって凡例の読みやすさが上がるとはいえ、判例を使うと常に読み手にプラスアルファの負荷をかけてしまう。

「黄色い点が Iris versicolorだよ」などの情報を文で表示しろという意味ではなく、もっと明らかな形でグラフの各要素が表すものを示せればいい。

### 直接のラベリング

一般的な方法として使われるのは direct labeling = 直接のラベリングだ。

19.2の図でそうしたように、グラフの要素が示すものに直接ラベルをつけるやりかたのこと。

19.2の図はこれ↓
![popgrowth-vs-popsize-bw-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/7d1af5d6-1985-3d45-3747-4d9e1bf16c59.png)

線グラフのお手本はこれ↓
![tech-stocks-good-no-legend-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/61f0bf8f-edb5-6b02-5c7b-27d5667689bf.png)

教訓としては、**可能なときはいつでも、凡例が必要ない形でグラフを設計しろ**。

#### 散布図

あやめデータの散布図も、異なる３つのグループになっているので、点の大半をカバーする楕円を描くことでも対応できる。

20.9
![iris-scatter-with-ellipses-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/258e2ba8-74f3-d100-7946-2ddeaee41665.png)

#### 密度プロット

密度プロットの場合も同様に、各カーブに対して直接ラベルづけをすることができる。（色で対応させる凡例を作るのではなく）

ラベルを色付きにすることで、直接ラベリングの効果を大きく高められることもあるが、逆に効果を大きく損なうこともある。

ラベルにする文字の色が薄かったり、その上細すぎたり、グラフ自体の要素と重なっている場合は読みづらい。

筆者はこうした状況を、同じ色の異なる濃さを使い分けることによって回避している。
塗りつぶしには薄い方、外枠や線、文字には濃い方というふうに。
（20.9の図にもこの戦略が使われている）

20.10
![iris-densities-direct-label-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/64380e1d-42e6-6ea5-318b-d0ffc753d221.png)

散布図の辺に密度プロットを描くこともできる。
こうすると、20.9ほど目にうるさくない。

![iris-scatter-dens-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/992b5c02-3d04-35d1-40c3-d09f6c9d675d.png)

:::note warn
すっきりはしている気がするものの・・・見やすいのか・・・？？？
:::

ひとつの変数を複数の要素に関連づける場合は、その要素の数だけ判例を描くようなことはしないで、凡例様のものがひとつあればよい。

以下のグラフは、では、X軸の値と色が対応している。

![temp-ridgeline-colorbar-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/cc36e08f-8330-d0e8-4ead-304c1124440b.png)

こうすることで、色の凡例とX軸が連動する。

# さいごに

要約は以上です。

これを読んで、読書会に参加したくなった方はこちら👇まで！

https://gaisaba.connpass.com/event/