[matplotlib] 60. 円グラフの要素の一部を棒グラフで表示

matplotlib

はじめに

matplotlibのplt.pieで作成できる円グラフの要素の一部分を、plt.barで作成できる棒グラフでより細かく表示する方法を紹介する。

コード

解説

モジュールのインポートなど

図の生成

subplots_adjustでhspaceを0にすることで上下に並んだグラフの間隔を狭める。

円グラフの作成

適当なデータ(ratios)とラベル(labels)を生成する。explodeは 円グラフの飛び出しの設定で、ここではSを飛び出させる。angleは円グラフの開始角度の設定であり、Sが円グラフの下側に来るように調整した。

棒グラフの作成

棒グラフはbarhで水平棒グラフとした。xposは0で固定で、leftの値を変化させることで積み上げ棒グラフとしている。yposはテキストを表示する位置なので、ypos = left + ax2.patches[j].get_width() / 2のように、各棒の中間にくるようにする。

凡例と軸の設定

凡例はlegendでncol=4とすることで4列とした。

棒グラフと円グラフの一部を結ぶ線の表示

円グラフの一部の座標の取得

円グラフの一部分であるWedgeのtheta1, theta2, 中心点centerと半径r を取得する。
棒グラフ全体の長さも取得する。

右側の線の表示

ConnectionPatchであるcon_rを作成して、ax2.add_artist(con_r)でグラフ上に表示する。

左側の線の表示

同上。

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

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

参考

https://matplotlib.org/gallery/pie_and_polar_charts/bar_of_pie.html
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.barh.html
https://matplotlib.org/api/_as_gen/matplotlib.patches.ConnectionPatch.html#matplotlib.patches.ConnectionPatch

コメント