はじめに
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
コメント