Matplotlibでネストされた円グラフ(ドーナツチャート)を描画する方法
Matplotlibを使えば、外側と内側の2層構造を持つネストされた円グラフ(ドーナツチャート)を簡単に作成できます。この記事では、NumPyで生成したデータをもとに、二重のリング状の円グラフを描画する手順をわかりやすく解説します。
ネストされた円グラフを描く基本手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- figureオブジェクトとサブプロットを作成します。
- 変数 size を初期化し、NumPyを使って vals・cmap・outer_colors・inner_colors のデータを用意します。
- pie() 関数を使って円グラフを描画します。外側のリングには各行の合計値を、内側のリングにはすべての要素を渡すのがポイントです。
- show() メソッドで図を表示します。
コード例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])
ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
wedgeprops=dict(width=size, edgecolor='w'))
plt.show()
コードのポイント解説
- size = 0.3:リングの幅を制御します。値を大きくするとリングが太くなります。
- vals.sum(axis=1):各行の合計値([92., 77., 39.])を計算し、外側のリングのセグメントサイズとして使用します。
- vals.flatten():2次元配列を1次元に平坦化し、内側のリングに6つのセグメントとして渡します。
- wedgeprops=dict(width=size, edgecolor='w'):ウェッジ(扇形)の幅を指定し、
edgecolor='w'によってセグメント間に白い境界線を引きます。 - cmap("tab20c"):外側は同系色でまとまりを持たせ、内側は対応する親カテゴリより明るい色を使うことで、階層関係が視覚的に分かりやすくなります。
実行結果
このコードを実行すると、外側のリングに3つの大カテゴリ、内側のリングにそれぞれの内訳となる6つのセグメントから構成されるネストされた円グラフが表示されます。これにより、全体の構成比とその詳細な内訳を1つの図で直感的に把握できます。
-
Matplotlibで複数のX軸・Y軸をプロットする方法(twinx / twinyの使い方)
データ分析や可視化では、スケールの異なる2つのデータ系列を同じグラフ上に重ねて表示したいケースがよくあります。Matplotlibでは、twinx() メソッドや twiny() メソッドを使うことで、X軸またはY軸を共有しながら独立したもう一方の軸を持つグラフを簡単に作成できます。 この記事では、左右に異なるY軸を持つグラフを作成する手順を、具体的なコード例とともに解説します。 複数のY軸を持つグラフの作成手順 以下の手順で、左と右に別々のY軸スケールを持つプロットを作成できます。 subplots() メソッドを使用して、図(figure)とサブプロット(axes)を作成します。 最初の
-
Matplotlibでカラーバー付き2D行列をPythonでプロットする方法
Pythonでカラーバー付きの2D行列をプロットするには、numpyを使って2次元配列(行列)を作成し、そのデータをimshow()メソッドに渡すのが最も簡単な方法です。手順numpyを使用して data2D という2次元配列を作成します。imshow() メソッドを使い、データを画像として(2次元の正規ラスタ上に)表示します。colorbar() メソッドに imshow() が返す ScalarMappable インスタンスを渡し、カラーバーを作成します。これにより、色と数値の対応関係がひと目でわかるようになります。図を表示するには、show() メソッドを使用します。コード例import