Matplotlib で表示されている図と同じ図を保存する方法
Suraj Joshi
2021年7月18日
Matplotlib
Matplotlib Images
図を matplotlib.pyplot.savefig() で保存する際には、テキストの相対的な大きさと線のストロークの幅を指定するために、dpi というパラメータを指定します。デフォルトでは、matplotlib.pyplot.show() の dpi の値は 80 であり、matplotlib.pyplot.savefig() の dpi の値は 100 です。
show() メソッドと savefig() メソッドで図形が同じに見えるようにするには、savefig() メソッドで dpi=fig.dpi を使用する必要があります。また、matplotlib.pyplot.figure())メソッドで figsize パラメータを設定することで、両方の図が同じになるようにプロットの絶対寸法を調整することができます。
savefig() メソッドで dpi=fig.dpi を指定すると、表示されている図形と同じ図形を保存する
import matplotlib.pyplot as plt
x = [1, 3, 4, 5, 8]
y = [3, 1, 5, 4, 9]
fig = plt.figure()
plt.plot(x, y)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("X vs Y")
fig.savefig("plot.png", dpi=fig.dpi)
plt.show()
出力:

保存された図:

この処理により、表示されている図と同じ plot.png という名前で保存されます。
時々、作成された図形の境界線が大きくなってしまうことがあります。これを解決するには、matplotlib.pyplot.tight_layout() メソッドを使用するか、savefig() メソッドで bbox_inches='tight' を設定します。
import matplotlib.pyplot as plt
x = [1, 3, 4, 5, 8]
y = [3, 1, 5, 4, 9]
fig = plt.figure()
plt.plot(x, y)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("X vs Y")
fig.savefig("plot.png", dpi=fig.dpi, bbox_inches="tight")
plt.show()
出力:

保存された図:

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn