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

matplotlib

はじめに

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

コード

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

解説

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

図の生成

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)でグラフ上に表示する。

左側の線の表示

同上。

参考

Bar of pie — Matplotlib 3.2.2 documentation
matplotlib.pyplot.pie — Matplotlib 3.2.2 documentation
matplotlib.pyplot.barh — Matplotlib 3.2.2 documentation
matplotlib.patches.ConnectionPatch — Matplotlib 3.2.2 documentation

コメント