プロットが終了したことをmatplotlibに伝えるにはどうすればよいですか?


165

次のコードは2つのPostScript(.ps)ファイルにプロットしますが、2番目のコードには両方の行が含まれています。

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(111)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.subplot(111)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

matplotlibに2番目のプロットで新たに開始するように指示するにはどうすればよいですか?


3
スタイルのポイントとして、図ごとに1つのプロットしかない場合、サブプロットを使用する必要はありません。
Autoplectic 2009

回答:


123

figureたとえば、を使用して新しいプロットを作成したりclose、最初のプロットの後に使用したりできます。


19
pyplotチュートリアルでは、「複数の図」セクションでclf()について言及しています。close()で古いプロットを閉じずにfigure()で新しいプロットを作成するだけの場合(GUIウィンドウを閉じた場合でも)、pyplotは古いFigureへの参照を保持しているため、メモリリークのように見える場合があります。
Jouni K.Seppänen、

5
plt.close()/ pylab.close()を使用して、すべての古い数値を削除できます
Calvin1602

1
最初のプロットの後、あなたは後を意味しplt.savefig("first.ps")ますか?
Sigur

@JouniK.Seppänenコメントに追加するために、Pythonはデフォルトで多くの数値を開くと警告を出します:「RuntimeWarning:20以上の数値が開かれています。」
rph

173

明確な図コマンドがあり、それはあなたのためにそれをするはずです:

plt.clf()

同じ図に複数のサブプロットがある場合

plt.cla()

現在の軸をクリアします。


1
ありがとう!PDFバックエンド(複数のプロットを保存できる)を使用している場合、plt.save()を呼び出すたびにこれを呼び出す必要があります
Ben DeMott

4
私の場合、plt.clf()は図をクリアするには十分でしたが、メモリリークを停止するには不十分でしたが、最初にplt.close()を呼び出すとメモリリークが停止しました。Python 2.7、matplotlib 1.1.1rc1(ubuntu 12.04)。ご参考までに。
DJDuff 2013

29

David Cournapeauから述べられているように、figure()を使用してください。

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.figure()
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.figure()
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

または、同じプロットの異なる位置のsubplot(121)/ subplot(122)。

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(121)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")

plt.subplot(122)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

3
まだ使用する必要がありますplt.clf()。数値は明示的に閉じられるまでメモリに保持されます
kaveish

13

plt.hold(False)最初のplt.plotの前に入力するだけで、元のコードをそのまま使用できます。


6
matplotlib == 2.0.2では、次のメッセージが表示されます:MatplotlibDeprecationWarning:pyplot.holdは非推奨です。
ジョナサン

12

Matplotlibをインタラクティブに、たとえばWebアプリケーション(ipythonなど)で使用している場合は、

plt.show()

plt.close()またはの代わりにplt.clf()


あなただけの私に私が失うことはありませんでした時間の束保存
reabow

1

どれも機能していない場合は、これを確認してください。それぞれの軸に沿ってデータのx配列とy配列があるかどうかを確認してください。次に、xとyを空に初期化したセル(jupyter)を確認します。これは、おそらく、データを再初期化せずにxとyにデータを追加しているためです。したがって、プロットにも古いデータがあります。それを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.