Matplotlib に表示せずにプロットを画像ファイルとして保存する方法

Suraj Joshi 2023年1月30日
  1. 画像を保存するための savefig() メソッド
  2. 画像を保存する matplotlib.pyplot.imsave() メソッド
Matplotlib に表示せずにプロットを画像ファイルとして保存する方法

savefig() および imsave() メソッドを使用して、Matplotlib から生成されたプロットを単純に保存できます。インタラクティブモードの場合、プロットが表示されることがあります。プロットの表示を回避するには、close() メソッドと ioff() メソッドを使用します。

画像を保存するための savefig() メソッド

matplotlib.pyplot.savefig() を使用して、Matplotlib から生成されたプロットを保存できます。プロットを保存する必要がある savefig() でパスとフォーマットを指定できます。

構文:

matplotlib.pyplot.savefig(
    fname,
    dpi=None,
    facecolor="w",
    edgecolor="w",
    orientation="portrait",
    papertype=None,
    format=None,
    transparent=False,
    bbox_inches=None,
    pad_inches=0.1,
    frameon=None,
    metadata=None,
)

ここで、fname は、現在のディレクトリからのパスを基準にしたファイル名を表します。

インタラクティブモードで表示せずにプロットを保存

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Plot generated using Matplotlib")
plt.xlabel("x")
plt.ylabel("sinx")
plt.savefig("Plot generated using Matplotlib.png")

これにより、Plot generated using Matplotlib.png を使用して生成されたプロットという名前で現在の作業ディレクトリに保存されます。

pngjpgsvgpdf など、他の形式でプロットを保存することもできます。同様に、figsave() メソッドの異なる引数を使用して画像をカスタマイズできます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Plot generated using Matplotlib")
plt.xlabel("x")
plt.ylabel("sinx")
plt.savefig("Customed Plot.pdf", dpi=300, bbox_inches="tight")

これにより、プロットが Customed Plot.pdf として作業ディレクトリに保存されます。ここで、dpi=300 は保存画像の 1 インチあたり 300 ドットを表し、bbox_inches='tight'は出力画像の周囲に境界ボックスがないことを表します。

非インタラクティブモードで表示せずにプロットを保存

ただし、インタラクティブモードの場合、図は常に表示されます。これを回避するために、close() メソッドと ioff() メソッドを使用して図のウィンドウを強制的に閉じ、プロットが表示されないようにします。ion() メソッドのためにインタラクティブモードがオンに設定されています。

close() メソッドでの表示を避ける

matplotlib.pyplot.close は、Figure ウィンドウを閉じるために使用できます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 100)
y = np.sin(x)
fig = plt.figure()
plt.ion()
plt.plot(x, y)
plt.title("Plot generated using Matplotlib")
plt.xlabel("x")
plt.ylabel("sinx")
plt.close(fig)
plt.savefig("Plot generated using Matplotlib.png")

ioff() メソッドで表示しない

matplotlib.pyplot.ioff() メソッドを使用して、インタラクティブモードをオフにできます。これにより、図が表示されなくなります。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 100)
y = np.sin(x)
fig = plt.figure()
plt.ion()
plt.plot(x, y)
plt.title("Plot generated using Matplotlib")
plt.xlabel("x")
plt.ylabel("sinx")
plt.ioff()
plt.savefig("Plot generated using Matplotlib.png")

画像を保存する matplotlib.pyplot.imsave() メソッド

matplotlib.pyplot.imsave() を使用して、配列を画像ファイルとして Matplotlib に保存できます。

import numpy as np
import matplotlib.pyplot as plt

image = np.random.randn(100, 100)
plt.imsave("new_1.png", image)
著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn