[matplotlib] 22. 区分線が表示された積み上げ棒グラフ

matplotlib

はじめに

この記事では、matplotlib を使って区分線が表示された積み上げ棒グラフを作成する方法を詳しく解説します。データの視覚化に役立つこの手法をわかりやすく説明していきます。

コード

解説

モジュールのインポート

バージョン

データの生成

横軸の要素が4個で、ind = np.arange(4)とすることで、0,1,2,3の値が生成されます。

A, B, Cのデータはそれぞれ縦軸の要素となります。widthは棒グラフの棒の幅を表します。

区分線の生成

ind_pは棒グラフの各棒の右側、ind_mは左側の位置を示します。

ind_line = np.sort(np.concatenate([ind_p,ind_m]))という処理で、ind_pとind_mを結合して昇順にソートしています。

A_lineはAの区分線のデータで、np.insert(A, np.arange(4), A)とすることで、[A[0], A[0], A[1], A[1], A[2], A[2], A[3], A[3]]という形式のデータを生成しています。

B_lineも同様の方法でデータを生成し、A_lineを加えることで底上げしています。C_lineについても同じ処理を適用します。

区分線付き棒グラフの生成

棒グラフの生成

棒グラフはax.bar()で生成できます。括弧内のindは横軸、Aは縦軸のデータを指定し、widthで棒の幅を設定します。zorderはプロットの表示順を制御するパラメータで、区分線よりも前面に表示させるために、区分線のzorder値(=1)より大きい2に設定しています。

底上げの設定は、bottomパラメータに底上げしたいデータを指定します。p2はAの上に、p3はA+Bの上に表示されます。

区分線の表示

区分線は破線グラフで表示しています。棒グラフよりも背面に表示させるため、zorderを1に設定しています。

軸と凡例の設定

plt.xticks(ind, (‘G1’, ‘G2’, ‘G3’, ‘G4’))のように記述することで、軸ラベルに任意の文字列を適用できます。

plt.legend((p1[0], p2[0], p3[0]), (‘A’, ‘B’, ‘C’), bbox_to_anchor=(1.02, 1), loc=’upper left’, borderaxespad=.1, fontsize=14)のように設定することで、凡例をグラフ枠外の左上に表示できます。

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

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

参考

Stacked bar chart — Matplotlib 3.10.5 documentation

コメント