matplotlib でグラフを保存すると凡例(legend)や軸ラベルが見切れる際の対処方法

matplotlib でグラフを保存すると

  • 凡例(legend)
  • 軸ラベル
  • colormap

が枠からはみ出てファイルに正しく保存できない場合の対処方法です

解決方法だけ列挙しておきます.困った時は片っ端から試してみましょう!

box_inches='tight' をつけてみる (役立ち度:★★★)

基本的にこれで解決するはずです

fig.savefig("output.png", bbox_inches='tight')

tight_layout()  (役立ち度:★★)

fig.tight_layout()
fig.savefig("output.png")

legendを移動させる (役立ち度:★)

plt.legend(bbox_to_anchor=(0.0, 0.5), loc='upper left')

それでいいのか?という気もしますが,まあやっつけ仕事の時は確実な方法です

matplotlib のバージョンを上げる (役立ち度:★★★)

意外と盲点なのですが,原因は matplotlib のバグ,というパターンがあります.

例えば以下のバグがあります.

legend is not present in the generated image if I use 'tight' for bbox_inches · Issue #10194 · matplotlib/matplotlib · GitHub

このバグは最新版では修正されていて,matplotlibを更新すれば,正常な動作に戻ります.

ただ古いバージョンでも savefig()にbbox_extra_artists=[legend]を指定すると回避できるそうです

plt.savefig('output.png', bbox_extra_artists=[legend,], bbox_inches='tight')