読者です 読者をやめる 読者になる 読者になる

きれいなグラフを描きたい

数学 自然科学

 学校ではあんまりグラフの描き方を系統立てて教えるということがない所為もあるのかもしれないけど、読みづらいグラフが世の中に氾濫している。
 グラフなんて小学校の算数だったか社会だったかで円グラフ、棒グラフ、折れ線グラフ、帯グラフなんかをどういうときに利用するのが適当かとかいうくらいでしか習った覚えがない。あとは、普通に数学で方程式のグラフを描くときに何かあったかもしれないけど、今回は数学の方面は置いておいて、見やすいグラフとはどんなものかということを説明したい。
 と、偉そうなことを言ったところで僕自身グラフを描く上で何か勉強した事があるわけでもなく、審美眼的才能に頼って描いている、つまり取り敢えず描いてみて見やすいように手を加えるという描き方をしている。それでもいくらかグラフを描いてきているので少しばかりのノウハウがある。ただし、円グラフ、棒グラフ、帯グラフなんて殆ど描いたことがないので、説明できるのは折れ線グラフについてのみである。
 グラフというのは表では読み取りづらいデータを視覚情報に訴えて一見して理解させるためのものなので、出来る限り単純化して必要不可欠なものだけを載せて不要なものは切り捨てなければならない。
 説明する上で利用するデータがいるのだけど、テキトーに拾ってきた砂糖水溶液の比重表を使う。データは以下の通り。

重量%\℃ 10℃ 20℃ 30℃ 40℃ 50℃ 60℃ 70℃ 80℃ 90℃ 97℃
1% 1.0037 1.0021 0.9995 0.9961 0.9919 0.987 0.9816 0.9756 0.9691 0.9642
5% 1.0196 1.0178 1.0151 1.0116 1.0073 1.0023 0.9968 0.9908 0.9804 0.9794
10% 1.0402 1.0381 1.0353 1.0316 1.0271 1.0221 1.0165 1.0104 1.0038 0.999
15% 1.0614 1.0591 1.0561 1.0522 1.0477 1.0425 1.0368 1.0406 1.024 1.0191
20% 1.0835 1.081 1.0777 1.0737 1.069 1.0637 1.0579 1.0517 1.045 1.0401
25% 1.1064 1.1035 1.1 1.0958 1.091 1.0856 1.0798 1.0735 1.0669 1.062
30% 1.1301 1.127 1.1233 1.1188 1.114 1.1085 1.1026 1.0963 1.0896 1.0847
35% 1.1547 1.1513 1.1473 1.1428 1.1377 1.1321 1.1262 1.1198 1.113 1.118
40% 1.1802 1.1765 1.1723 1.1676 1.1624 1.1568 1.1507 1.1443 1.1375 1.1324
45% 1.2065 1.2025 1.1982 1.1933 1.188 1.1823 1.1762 1.1697 1.163 1.158
50% 1.2338 1.2296 1.225 1.22 1.2146 1.2088 1.2026 1.1962 1.1994 1.1945
55% 1.262 1.2575 1.2528 1.2476 1.2421 1.2362 1.23 1.2235 1.2167 1.2118
60% 1.2912 1.2865 1.2815 1.2762 1.2706 1.2646 1.2584 1.2519 1.2411 1.2402
65% 1.3213 1.3163 1.3112 1.3158 1.3001 1.2941 1.2879 1.2814 1.2746 1.2695
69% 1.346 1.349 1.3564 1.3302 1.3244 1.3184 1.3122 1.3057 1.2991 1.2937

 このデータには温度、濃度、比重の3つの要素があるので、グラフ化するのは少し難しい。
 エクセルで何も考えずにグラフを作ろうとすると次のようなダメダメなものができる。

 これを綺麗に書き改めると次のグラフとなる。

 以下、箇条書きで修正点を説明していく。

・グラフウィンドウの形
 正方形のウィンドウというのはいかにもカッコ悪い。デザインの基本である黄金比( 1: \sqrt{2})となるのが好ましい。
・グラフの背景
 今のエクセルは背景色は白だけど、昔のエクセルは背景がグレーだった。背景がグレーだと様々な色が見やすいという配慮なのかと思う。色相環の上で距離の遠い色を選べばコントラストは強くなるため見やすくなるので、背景色が何色なら見やすいということはない、ということにエクセルの開発チームが気付いたんじゃないかなと思う。
・縦軸、横軸の範囲
 データの存在しない領域を表示する必要はどこにもないのでデータのある範囲のうち区切りの良い場所で切る。
・軸の説明
 縦軸、横軸がそれぞれ何を表しているのかを書いておく必要がある。単位のあるものは一緒に書いておく。ここではカッコで括って書いたけど、スラッシュで分割して単位を表記する方法もある。
・グラフタイトル
 なくてもあんまり困らないけど、あったほうがいいよね。

 今回は、修正の必要がなかったので上の囲いの中には入っていないけど、軸の数値について。デフォルトの設定だとエクセルがテキトーに値をはめ込むので、例えばこんな感じに凄く細かい数値になったり、無駄に桁数を多く取ったりすことがある。こういうのは切りの良い値にした上、末尾の0を消さなければならない。

 温度、濃度、比重の3成分がある。ここでは縦軸を比重、横軸を温度として濃度毎にグラフを描いた。成分が3つあるので組み合わせは6つとなるけど、どうしてこのように軸を選択したかを説明しておかなければならない。
 とはいっても、そんなに難しいことでもない。縦軸を比重に選んだのは、最初の表の「砂糖水溶液の比重表」という名称から分かるように一番知りたい情報だからである。縦軸が決まってしまえば、あとは横軸を温度、濃度のどちらかにするかという選択だけである。一応、両方を同時に表示するという方法もあるのだけど、この場合は見づらくなるだけなので避ける。実際に温度を横軸に選んだのは両方描いてみてこちらの方が見やすかったからである。横軸に濃度を取ると次の様になる。

 これだと1つ1つのラインが隙間なく詰まっているので自分の読みたい温度のグラフがどれか読みづらい。そんなわけで、読みやすさを取ったら横軸は温度となるのである。
 ちなみに成分が3つあるので3次元の立体グラフを書いてみたらどうなるだろうかと思ってやってみた。

 この通り、どう立体になっているかも分からないダメなものになったので、これ以上の作業をする気にならずに放り投げた。
 斯様に3次元のグラフは扱える場面が限られる。グラフ自体が起伏と変化に富んでいないと3次元にするありがたみがない。
 一例として次に示すのはポルフィリン錯体にピリジンを配位させたときのスペクトル変化をラピッドスキャンしたものである。

 大体200ms毎に約10秒間測定した結果である。普通、論文なんかに載せる図ではこの中で代表的なものを4箇所くらい選ぶのだけど、3Dで描く時はデータ量が多いほうが映えるので全て掲載した。
 ソーレ帯が480nmから500nmにシフトしているのだが、当然ながら反応開始時は変化が大きく、10秒後にはほとんど変化しなくなり、重ね書きの結果非常に密なグラフとなっている。
 これを3Dで描くと次のようになる。

 奥行きが時間だが、時間の絶対値を表記しづらいので何も書いていない。一番手前が0.0199秒で一番奥が9.7709秒である。
 この3Dグラフは時間変化が視覚的に分かりやすい反面、スポイルする情報も結構多いので、素人客を引き込むには使えるのだけど論文とかには使えない。将来、紙の論文を止めてアニメーションを実装できるようになったら、これを3D情報として色んな方向から見るようなデザインにすることで利用できるかもしれないが、現時点では見世物にしかならない。
 3Dグラフにしたことで分からなくなった、あるいは分かりづらくなった情報として大きいのは吸光度が読めないことである。10秒後の吸光度は500nmで4.5くらいだが、このグラフから読み取るのは難しい。また、時間や波長も読み取りづらく、結局全てのデータが曖昧になってしまうため、学術的には良くないことだらけである。
 なお、このように3Dグラフを描く時は奥行きの軸を描くと同時にグラフの端っこ部分をサイト内に入れるべきである。こうすることで見る人に対して奥行きの方向を意識させることができるから。

 後半は3Dグラフの描き方になってしまった。
 いつものように作画に使ったエクセルファイルをアップしておく。
 砂糖水 比重.zip
 PY3-34.zip