[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.9.2 documentation

コメント