はじめに
3D円グラフは各要素の比率を正しく表示できないにもかかわらず広く使用されています。その理由としては見た目の良さが挙げられますが、最も重要な理由は、3次元的視点により手前側の要素を誇張して表現できる点だと考えられます。本研究では、この誇張効果を定量的に理解するため、視点角度によって変化する各要素の面積比率を測定し、その変化をアニメーションで可視化しました。
問題の背景
3D円グラフが広く使用される主な理由は以下の点にあります:
- 視覚的に魅力的で印象に残りやすい
- プレゼンテーションにおいて目を引く要素となる
- 手前に配置したセグメントを意図的に強調できる
特に最後の点は、データ表現の公正さという観点で倫理的な問題を含んでいます。実際のデータ比率よりも特定のセグメントが過大に表示されることで、聴衆の解釈に影響を与える可能性があります。
コード
解説
モジュールのインポート
データの生成
3D円グラフの作成
matplotlibには3D円グラフを作成する標準機能が実装されていません。そのため、下記記事と同様の手法を採用し、Wedgeオブジェクトを作成した後、pathpatch_2d_to_3d関数を使用して3Dグラフに変換する方法を実装しました。

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

各角度における面積比率を求める
視点の高さを変化させるために ax.view_init(elev=90-1*i, azim=80) を使用し、生成された画像を plt.save() で保存しました。
保存した画像は rgb2gray 関数でグレースケールに変換して開きました。画像のヒストグラムは以下のようになります。

それぞれのピーク周辺データの比率を求め、dataに各角度で求めた面積比率を格納していきます。
アニメーションの表示
3D円グラフの角度が変化するアニメーションは下記を参考にしました。

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


グラフの手前に配置された青とオレンジのセグメントは、視点角度が低くなるにつれて見かけの面積比率が増加していることが明確に観察できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)参考

コメント