[matplotlib animation] 63. 3D円グラフの面積比率の見る角度による変化

matplotlib

はじめに

3D円グラフは各要素の比率を正しく示すことができないにも関わらず広く使用されている。その理由として、見た目が良いなどの理由が挙げられるが、一番の理由は、円グラフを3次元的視点でみるので、手前側にある要素を誇張して表現できることだと思われる。ここでは、この誇張効果を定量的に理解するため、円グラフをみる角度によって変化する各要素の面積比率を測定し、角度による面積比率の変化をアニメーション表示することを試みた。

コード

コードをダウンロード(.pyファイル)コードをダウンロード(.ipynbファイル)

解説

モジュールのインポート

データの生成

3D円グラフの作成

matplotlibには3D円グラフを作成する機能はない。そこで下記記事と同様にWedgeを作成し、pathpatch_2d_to_3dにより3Dグラフとする方法を採用した。

[matplotlib 3D] 54. 3D円グラフ
matplotlibには3D円グラフを作成する機能はない。そのため、Wedgeを手動で3Dグラフに貼り付けることで3D円グラフを作成した。

この3Dグラフを真上(elev=90)からみた図は下記のようになる。

各角度における面積比率を求める

ax.view_init(elev=90-1*i,azim=80)で視点の高さを変化させて、その画像をplt.save()で保存する。
保存した画像をrgb2grayでグレースケール画像として開く。画像のヒストグラムは下記のようになる。

それぞれのピーク周辺データの比率を求め、dataに各角度で求めた面積比率を格納していく。

アニメーションの表示

3D円グラフの角度が変化するアニメーションは下記を参考にした。

[matplotlib 3D] 14. 3Dグラフの回転アニメーション
matplotlib mplot3d のグラフの回転アニメーション

積み上げ棒グラフとそのアニメーションについては下記を参考にした。

[matplotlib] 22. 区分線が表示された積み上げ棒グラフ
matplotlibで棒グラフに区分線を表示する方法について説明する。
[matplotlib animation] 43. データの追加によるヒストグラムの形状変化アニメーション
matplotlib FuncAnimationによる、データの追加によりヒストグラムの形状が変わっていくアニメーション

手前にある青とオレンジの面積比率が角度の低下に伴って増加していることがわかる。

参考

3D円グラフ撲滅委員会より、なぜ3D円グラフを使ってはいけないか
なぜ3D円グラフを使ってはいけないのか、そして、グラフとして円グラフは見やすいグラフなのかについて、また、3D円グラフと円グラフに関する記事やコメントが書かれたウェブサイトをご紹介。
なぜ円グラフを安易に使ってはいけないのか?実際にグラフを使って理由を説明します
普段何気なく円グラフを使っていないでしょうか?見た目がかっこいいからと3D円グラフを使っていないでしょうか?円グラフは作成が簡単なのでつい使いがちなグラフですが、見る人の認識を誤らせやすいため、使用に注意が必要です。そこで、なぜ円グラフを使ってはいけないのかを実例を示しながら説明します。円グラフ、ダメ、絶対!

コメント