Pythonの視覚化で学ぶドーナツチャートの描画とネスト方法

파이썬 시각화 중첩 도넛 차트

パイソン ビジュアライゼーションを使用すると、複雑なデータを美しくわかりやすいチャートで表現することができます。 特に、ドーナツチャートは比率を視覚化する際に非常に便利なツールです。しかし、単純に比率を表現するだけでは満足できません!ネストされたドーナツチャートを活用すれば、トレンディで深みのあるビジュアライゼーションを作成することができます。

この記事では Pythonの視覚化ライブラリである matplotlibを使ってドーナツチャートを段階的に描く方法を学びます。基本的なドーナツチャートからネストされたドーナツチャートを描画する高度なテクニックまで詳しく解説しますので、ぜひ、じっくりとご覧ください!

ドーナツチャートとは何ですか?

ドーナツチャートは パイチャートの変形で、中央部分が空洞になっている形式この空白のスペースがチャートをすっきりさせ、追加情報を入れるのにも有利です。

主な特徴

  • データ比率を直感的に表示します。
  • 複数のデータを重ね合わせて表現することで、多次元的な視覚化が可能です。
  • すっきりとしたモダンなデザインは、トレンディなデータビジュアライゼーションに適しています。

Pythonビジュアライゼーションで基本的なチャートを描く

파이썬 시각화 도넛 차트

まず、上記のような基本的なチャートを描く方法から説明します。 ここでは、上のように matplotlibを活用します。

Pythonコード例 - 基本的なドーナツチャート

# ライブラリの読み込み
import matplotlib.pyplot as plt

#データ設定
labels = ['Country A', 'Country B', 'Country C', 'Country D']].
sizes = [30, 20, 35, 15].
colors = ['#ff9999', '#66b3ff', '#99ffff99', '#ffcc99']].

#ドーナツチャートを生成
fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, colors=colors, wedgeprops=dict(width=0.3), autopct='%1.1f%%')

#中央に円を追加 (ドーナツ型にする)
centre_circle = plt.Circle((0, 0), 0.70, fc='white')
fig.gca().add_artist(centre_circle)

# チャートのタイトル設定
plt.title('Basic Donut Chart')
plt.show()

ネストチャートの描画

ネストチャートは、データの 2つの層を同時に視覚化する際に使用します。 各レイヤーがデータをより豊かに見せてくれます。

Pythonコード例 - ネスティングドーナツチャート

matplotlib.pyplot as plt をインポートします。

# 外部ドーナツデータの設定
outer_labels = ['Germany', 'France', 'China', 'UK', 'Italy']].
outer_sizes = [30, 23, 16, 18, 13]].

# 内部ドーナツデータ設定
inner_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']].
inner_sizes = [15,15,12,11,8,8,8,9,9,9,9,7,6]。

# 色設定
outer_colors = plt.cm.Blues([0.6, 0.7, 0.8, 0.9, 1.0])
inner_colors = plt.cm.RdYlBu_r([0.6, 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1.0, 1.0])

#ネスティングドーナツチャートの生成
fig, ax = plt.subplots()

# 外側のドーナツ層
ax.pie(outer_sizes, labels=outer_labels, radius=1.3, colors=outer_colors、
       wedgeprops=dict(width=0.3), labeldistance=1.1, autopct='%1.1f%%%', pctdistance=0.85)

# 内側のドーナツ層
ax.pie(inner_sizes, labels=inner_labels, radius=1.0, colors=inner_colors、
       wedgeprops=dict(width=0.3), labeldistance=0.7, autopct='%1.1f%%', pctdistance=0.6)

#の中央を空ける(ドーナツ形完成)
centre_circle = plt.Circle((0, 0), 0.6, fc='white')
fig.gca().add_artist(centre_circle)

# タイトル設定(padオプションで間隔を調整)
plt.title('Improved Nested Donut Chart with Adjusted Labels', pad=30)

# レイアウト設定
plt.tight_layout()
plt.show()

よくある間違い

  • データが過剰に多い場合: 項目が多すぎるとチャートが複雑になります。主なデータだけを含めるようにしてください。
  • 色の混乱: 似たような色を使用すると、アイテムの区別が難しい場合があります。カラーパレットを活用しましょう。
  • 比率とラベルの不一致: autopctを使用して、正確な比率が表示されるように確認する必要があります。

よくある質問(FAQ)

Q1.このチャートはいつ使うのが良いですか?
このチャートは、比率
比較が必要だが、すっきりとしたモダンなデザインが必要な状況に適しています。

Q2.ネストドーナツチャートの用途は何ですか?
2つの階層のデータを同時に比較・分析する場合に効果的です。

Q3.円グラフとの違いは何ですか?
ドーナツチャートは真ん中が空白のため、追加情報を表示したり、デザイン的に優れています。

仕上げ

ドーナツチャートはパイチャートの単調さを脱却し、Pythonの可視化で人気のある手法です。基本的なチャートからネストされたチャートまで、実践的なデータを活用して素敵なドーナツチャートを作ってみましょう!データビジュアライゼーションの魅力に一歩近づくことができるでしょう。

ちなみに、Pythonの可視化分野では、時系列分析をする人が多いです。 Pythonデータ分析の例:S&P 500の株式データの時系列分析と将来の価格予測を行う ポストを通してその知識を身につけましょう!

# コード詳細解説

基本的なチャートの描画

# ライブラリの読み込み
import matplotlib.pyplot as plt  
  1. ライブラリの読み込み
  • matplotlib.pyplot:データ可視化のために使用する matplotlibのサブモジュールです。
  • このモジュールは グラフ、チャート などを描くのに活用されます。
# データ設定
labels = ['Country A', 'Country B', 'Country C', 'Country D']].
sizes = [30,20,35,15]を設定します。
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']].  
  1. データ設定
  • ラベル: 各ピース(セクション)の名前です。例:「Country A」、「Country B」など:'Country A', 'Country B' など。
  • サイズ:各部分の比率を設定します。例:30%, 20%, 35%, 15%.
  • カラー各セクションに使用するカラーコードです。
    • '#ff9999'カラー : ライトピンク
    • '#66b3ff'カラー : ライトブルー
    • '#99ff99'カラー : ライトグリーン
    • '#ffcc99'色 : オレンジ色
# ドーナツチャート生成
fig, ax = plt.subplots()  
  1. チャート作成
  • イチジク、斧: (キャンバス)と (グラフが描かれる領域)を生成します。
  • plt.subplots(): 新しいチャートを描くためのスペースを準備します。
ax.pie(sizes, labels=labels, colors=colors, wedgeprops=dict(width=0.3), autopct='%1.1f%%')  
  1. ドーナツチャート作成
  • サイズ各セクション(ピース)の比率を表します。
  • ラベル=ラベルセクションに表示されるラベル(名前)を設定します。
  • colors=colors: セクションの色を設定します。
  • wedgeprops=dict(width=0.3): ドーナツ型を作るために彫刻の幅を調整します。
    • 幅=0.3は、円全体の幅のうち内側の70%を空ける設定です。
  • autopct='%1.1f%%'各ピースに比率(%)を表示します。
    • %1.1f小数点以下1桁まで表示するように設定します。
# 真ん中の円を追加 (ドーナツ型にする)
centre_circle = plt.Circle((0, 0), 0.70, fc='white')
fig.gca().add_artist(centre_circle)  
  1. 真ん中の円を追加(ドーナツ型にする)
  • plt.Circle((0, 0), 0.70, fc='white'):
    • (0, 0): 円の中心座標です。
    • 0.70円の半径を設定します。
    • fc='white'円の色を白に設定します。
  • fig.gca().add_artist(centre_circle):
    • 現在のaxes(グラフ領域)に上記で生成した白い円を追加します。
  • このコードのおかげで、真ん中が空白の ドーナツ型が完成します。
# チャートのタイトル設定
plt.title('Basic Donut Chart')  
  1. チャートタイトル設定
  • plt.title(): チャート上部にタイトルを追加します。
  • 基本ドーナツチャート: チャートのタイトル文字列です。
plt.show()  
  1. 結果出力
  • plt.show(): チャートを画面に表示します。
  • このコマンドを実行することで、チャートが最終的に出力されます。

ネストチャートの描画

matplotlib.pyplot as plt をインポートします。  
  1. ライブラリの読み込み
  • データ可視化のための matplotlibパイプロット モジュールをインポートします。
# 外部ドーナツデータ設定
outer_labels = ['Germany', 'France', 'China', 'UK', 'Italy']].
outer_sizes = [30, 23, 16, 18, 13]].  
  1. 外部ドーナツデータ設定
  • outer_labels外側のドーナツに表示される各ピースの名前です。
  • outer_sizes: 外側のドーナツの各部分の比率(%)を表します。
# 内部ドーナツデータ設定
inner_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']].
inner_sizes = [15,15,12,11,8,8,8,9,9,9,9,7,6]。  
  1. 内部ドーナツデータ設定
  • インナーラベルです:内側のドーナツに表示される各ピースの名前です。
  • インナーサイズを設定します:内側のドーナツの各部分の比率で、外側の部分の比率に合わせて分割して設定します。
# 色設定
outer_colors = plt.cm.Blues([0.6, 0.7, 0.8, 0.9, 1.0])
inner_colors = plt.cm.RdYlBu_r([0.6, 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1.0, 1.0])  
  1. カラー設定
  • plt.cm.Blues外側のドーナツに使用するカラーパレットで、青系の色合いを作ります。
  • plt.cm.RdYlBu_r:内部ドーナツに使用するカラーパレットとして、赤-黄-青の組み合わせを適用します。
  • [] 内の数字は色の濃さ(0~1)を設定します。
# ネスティングドーナツチャートを作成します。
fig, ax = plt.subplots()  
  1. チャート作成
  • イチジク、斧: 新しい figure と axes オブジェクトを作成します。
  • plt.subplots()チャートを描くキャンバスを用意します。
# 外側のドーナツ層
ax.pie(outer_sizes, labels=outer_labels, radius=1.3, colors=outer_colors、
       wedgeprops=dict(width=0.3), labeldistance=1.1, autopct='%1.1f%%%', pctdistance=0.85)  
  1. 外側のドーナツ生成
  • outer_sizes: 外側のドーナツの比率を入力します。
  • labels=outer_labels各ピースに表示するラベル(国名)を設定します。
  • radius=1.3外側のドーナツの半径を設定します。
  • colors=outer_colors: 外側のドーナツの色を設定します。
  • wedgeprops=dict(width=0.3)ドーナツの形を作るために、各ピースの幅を設定します。
  • ラベル距離=1.1: ラベル(国名)をドーナツの外側に少し移動させます。
  • autopct='%1.1f%%'各部分の割合を小数点以下1桁で表示します。
  • pctdistance=0.85比率テキストをドーナツ片の内側に近い位置に配置します。
# 内側のドーナツ層
ax.pie(inner_sizes, labels=inner_labels, radius=1.0, colors=inner_colors、
       wedgeprops=dict(width=0.3), labeldistance=0.7, autopct='%1.1f%%', pctdistance=0.6)  
  1. 内側のドーナツ生成
  • インナーサイズ: 内部ドーナツの比率を入力します。
  • labels=inner_labels各ピースに表示するラベルを設定します。
  • radius=1.0を設定します:内側のドーナツの半径を設定します。
  • colors=inner_colors: 内側のドーナツの色を設定します。
  • wedgeprops=dict(width=0.3)ドーナツの形を作ります。
  • ラベル距離=0.7ラベル(文字列)を彫刻の内側に近い位置に配置します。
  • autopct='%1.1f%%'比率を小数点以下1桁で表示します。
  • pctdistance=0.6比率テキストをより内側に移動させます。
# 中央を空ける (ドーナツ形完成)
centre_circle = plt.Circle((0, 0), 0.6, fc='white')
fig.gca().add_artist(centre_circle)  
  1. 真ん中を空ける
  • plt.Circle((0, 0), 0.6, fc='white')中央に白い円を追加して、ドーナツの形を完成させます。
  • add_artist(centre_circle):チャートに白い丸を追加します。
  • (0, 0):中心座標です。
  • 0.6白丸の半径です。
# タイトル設定(padオプションで間隔を調整)
plt.title('Improved Nested Donut Chart with Adjusted Labels', pad=30)  
  1. タイトル設定と間隔調整
  • plt.title(): チャート上部にタイトルを追加します。
  • パッド=30: タイトルとチャートの間隔を30ピクセルに調整します。
  • "ネストされたドーナツチャートのラベルを調整した改良版": チャートのタイトルです。
# レイアウト設定
plt.tight_layout()  
  1. レイアウトの最適化
    • plt.tight_layout(): チャートの要素が互いに重ならないように自動的に余白を調整します。
plt.show()
  1. 結果出力
    • チャートを画面に表示します。

類似の投稿