我怎么告诉matplotlib我已经完成了一个情节?

Ste*_*ini 150 python plot matplotlib

以下代码绘制到两个PostScript(.ps)文件,但第二个包含两行.

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")
Run Code Online (Sandbox Code Playgroud)

我如何告诉matplotlib重新开始第二个情节?

ran*_*let 159

有一个清晰的数字命令,它应该为你做:

plt.clf()
Run Code Online (Sandbox Code Playgroud)

如果您在同一图中有多个子图

plt.cla()
Run Code Online (Sandbox Code Playgroud)

清除当前轴.

  • 在我的例子中,plt.clf()足以清除数字但不足以阻止内存泄漏,但首先调用plt.close()会停止内存泄漏.Python 2.7,matplotlib 1.1.1rc1(ubuntu 12.04).仅供参考. (4认同)

Dav*_*eau 115

figure例如,您可以使用创建新绘图,或close在第一个绘图之后使用.

  • pyplot教程确实在"多个数字"部分中提到了clf().请注意,如果您只使用figure()创建一个新绘图而不使用close()关闭旧绘图(即使关闭GUI窗口),pyplot会保留对旧图形的引用,这可能看起来像内存泄漏. (18认同)
  • 您可以使用plt.close()/ pylab.close()删除所有旧数字 (4认同)
  • 在第一个情节之后,你的意思是在`plt.savefig("first.ps")`之后吗? (2认同)

小智 28

如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")
Run Code Online (Sandbox Code Playgroud)

或子图(121)/子图(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")
Run Code Online (Sandbox Code Playgroud)

  • 您仍应使用`plt.clf()`,数字将保留在内存中,直到显式关闭 (2认同)

Dir*_*nux 13

只需plt.hold(False)在第一个plt.plot之前输入,就可以坚持原始代码.

  • 在matplotlib == 2.0.2中,我收到此消息:MatplotlibDeprecationWarning:pyplot.hold已弃用. (5认同)

Dam*_*amo 8

如果您以交互方式使用Matplotlib,例如在Web应用程序中(例如ipython),您可能正在寻找

plt.show()
Run Code Online (Sandbox Code Playgroud)

而不是plt.close()plt.clf().


jvr*_*sem 6

从matplotlib.pyplot的源代码中,在figure()文档下:

If you are creating many figures, make sure you explicitly call
    `.pyplot.close` on the figures you are not using, because this will
    enable pyplot to properly clean up the memory.
Run Code Online (Sandbox Code Playgroud)

因此,正如其他人所说,plt.close()当您完成每个人物时,请使用它,然后您就可以开始了!

注意:如果您通过 创建图窗f = plt.figure(),则可以通过plt.close( f )而不是关闭它f.close()