Matplotlibはそこに機能を提供します:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
ドキュメンテーションはこれらの機能の違いが何であるかについて多くの洞察を提供しません。各機能をいつ使用する必要がありますか。
Matplotlibは、Figureウィンドウに多くの軸で構成されている可能性があるFigureが含まれるという階層的な順序を使用するため、これらはすべて異なる動作をします。さらに、pyplotインターフェースからの関数とFigure
クラス上のメソッドがあります。両方の場合について以下で説明します。
pyplot
は、matplotlibを機能的に使用できるようにするいくつかの関数を集めるモジュールです。ここではpyplot
がimport matplotlib.pyplot as plt
としてインポートされたと仮定します。この場合、ものを削除する3つの異なるコマンドがあります。
plt.cla()
はAxes 、すなわち現在のFigureの現在アクティブなAxesをクリアします。それは他の斧をそのままにします。
plt.clf()
は現在の図形全体 をそのすべての軸でクリアしますが、ウィンドウは開いたままにしておくので、他のプロットに再利用できます。
plt.close()
はウィンドウ を閉じます。特に指定がなければ、これが現在のウィンドウになります。
どの関数があなたに最も適しているかはあなたのユースケースに依存します。
close()
関数はさらにどのウィンドウを閉じるべきかを指定することを可能にします。引数は、figure(number_or_name)
を使用して作成されたときにウィンドウに与えられた番号または名前、あるいはfig
を取得したFigureインスタンス、つまりusingfig = figure()
のいずれかです。 close()
に引数が与えられていない場合、現在アクティブなウィンドウは閉じられます。さらに、すべての図を閉じる構文close('all')
があります。
さらに、Figure
クラスは数値をクリアするためのメソッドを提供します。以下ではfig
がFigure
のインスタンスであると仮定します。
fig.clf()
は図全体をクリアします 。 fig
が現在の数値である場合にのみ、この呼び出しはplt.clf()
と同等です。
fig.clear()
はfig.clf()
の同義語です。
del fig
でも関連するFigureウィンドウを閉じないことに注意してください。私が知る限りでは、Figureウィンドウを閉じる唯一の方法は、上記のようにplt.close(fig)
を使うことです。
私が今日発見したのは、警告だけです。プロットを何度も呼び出す関数がある場合は、plt.close(fig)
ではなくfig.clf()
を使用したほうがよいでしょう。どういうわけか、最初の関数はメモリに蓄積されません。要するに メモリが気になる場合はplt.close(fig) を使用してください(より良い方法があるようですが、関連リンクについてはこのコメントの最後に進んでください)。
したがって、次のスクリプトは空のリストを作成します。
for i in range(5):
fig = plot_figure()
plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
これは5つの数字を含むリストを作成しますが。
for i in range(5):
fig = plot_figure()
fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
上のドキュメントから、Figureを閉じることとウィンドウを閉じることの違いは何か私にはわかりません。多分それははっきりするでしょう。
完全なスクリプトを試してみたい場合は、次のものがあります。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
plt.close(fig)
print(plt.get_fignums())
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
fig.clf()
print(plt.get_fignums())
メモリが問題になる場合は、SOに誰かがすでに回避策を投稿しています。参照: 参照カウントの数字を作成します
plt.cla() は現在の軸をクリアを意味する
plt.clf() は現在の図をクリアを意味する
また、 plt.gca() (現在の軸を取得)と plt.gcf() (現在の図を取得)があります。
ここでもっと読んでください: Matplotlib、Pyplot、Pylabなど:これらとの違いは何ですか?