1. ホーム
  2. パイソン

matplotlib は plt.savefig() を使って、画像の隣にある空白を除いて出力します。

2022-02-26 15:25:06

最近、出力画像を密着させ、軸を取り除き、出力画像サイズを設定する必要があるプロットに取り組んでいます。

しかし、matplotlib は plt.savefig() を使って画像を保存していることがわかりました。

は周囲が空白の円になっています。では、その空白を取り除くにはどうしたらいいのでしょうか?


まず、軸表示をオフにすること。

plt.axis('off')

しかし、これでは表示を消しただけで、透明軸が左下の位置を占めたままとなり、出力画像が右にずれてしまいます。

軸を完全に削除するには、コードを次のように変更する必要があります。


plt.axis('off')
fig = plt.gcf()
fig.set_size_inches(7.0/3,7.0/3) #dpi = 300, output = 700*700 pixels
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
plt.margins(0,0)
fig.savefig(out_png_path, format='png', transparent=True, dpi=300, pad_inches = 0)

fig = plt.gcf()
fig.set_size_inches(7.0/3,7.0/3) #dpi = 300, output = 700*700 pixels

plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
plt.margins(0,0)
fig.savefig(out_png_path, format='png', transparent=True, dpi=300, pad_inches = 0)

これで空白の削除は完了です。

注意: subplot_adjust + margin(0,0) の代わりに、bbox_inches = 'height' を fig.savefig() の引数に追加しても実現可能です。

ただし、画像の出力サイズの設定は無効になります。