回答:
matplotlibは、Figureウィンドウに多数の軸で構成される可能性があるFigureが含まれる階層順序を使用するため、それらはすべて異なることを行います。さらに、pyplotインターフェースの関数があり、Figure
クラスにメソッドがあります。以下で両方のケースについて説明します。
pyplot
matplotlibを機能的に使用できるようにするいくつかの関数を収集するモジュールです。ここでは、pyplot
としてインポートされていると想定していimport matplotlib.pyplot as plt
ます。この場合、ものを削除する3つの異なるコマンドがあります。
plt.cla()
Axes、つまり現在のFigureで現在アクティブなAxesをクリアします。他の軸はそのままです。
plt.clf()
現在のFigure全体とそのすべての軸をクリアしますが、ウィンドウを開いたままにして、他のプロットで再利用できるようにします。
plt.close()
特に指定されていない場合は、現在のウィンドウになるウィンドウを閉じます。
したがって、どの関数が最も適しているかは、ユースケースによって異なります。
このclose()
関数はさらに、どのウィンドウを閉じるかを指定することを可能にします。引数は、ウィンドウを使用して作成されたときにウィンドウに与えられた番号または名前のいずれか、または取得figure(number_or_name)
されたFigureインスタンスfig
、つまりを使用したもののいずれかfig = figure()
です。に引数を指定しないclose()
と、現在アクティブなウィンドウが閉じます。さらに、close('all')
すべての図を閉じる構文があります。
さらに、このFigure
クラスは図をクリアするためのメソッドを提供します。以下でfig
は、のインスタンスであると想定しますFigure
。
fig.clf()
図全体をクリアします。この呼び出しは、が現在のFigureであるplt.clf()
場合にのみ同等fig
です。
fig.clear()
の同義語です fig.clf()
del fig
関連付けられたFigureウィンドウを閉じないことにも注意してください。私が知る限り、Figureウィンドウを閉じる唯一の方法plt.close(fig)
は、上記のように使用することです。
clear()
、cla()
寄生虫の軸のみcla()
が特別に扱われていることとの違いはあまりありません
clear()
機能がありませんmatplotlib.pyplot
(MacOSのバージョン1.4.2)。関連するドキュメントに案内してもらえますか?
今日私が発見した警告があります。プロットを何度も呼び出す関数がある場合は、何とかして最初の関数がメモリに蓄積されない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で回避策を投稿している: 参照カウントされる図を作成する
pyplot
API でガベージコレクションされないことも、同様に恐ろしくて恐ろしいことです。
plt.cla()は現在の軸をクリアすることを意味します
plt.clf()は現在の数値をクリアすることを意味します
また、plt.gca()(現在の軸を取得)とplt.gcf()(現在の図を取得)もあります。
詳細はこちら:Matplotlib、Pyplot、Pylabなど:これらとそれぞれを使用するタイミングの違いは何ですか?
close()
、非特異的なコマンドですが、私はフィギュアの閉鎖(指定する方法を探して行ってきましたfig.close()
関数ではありませんが)。正しい構文は次のとおりですplt.close(fig)
。