我正在使用Python和matplotlib库。
我经历了一个非常长的代码,在此过程中创建了多个数字。
我做过很多次这样的事情:
plt.figure()
plt.plot(x, y)
plt.grid('on')
plt.close()
然后,在某些时候,我收到错误:
More than 20 figures have been opened. Figures created through the pyplot interface (matplotlib.pyplot.figure) are retained until explicitly closed and may consume too much memory.
错误对我来说很清楚,但是:我的确称之为“plt.close()”。
既然我正在写这篇文章,我意识到也许plt.close()必须采用特定的限定符来关闭什么数字?就像plt.close(1)等一样。我想我可以使用plt.close('all'),但如果我只是想关闭最近的数字呢?
答案 0 :(得分:1)
问题中的代码应该可以正常工作。由于您在每个循环步骤中关闭图形,因此只会打开一个图形。
最小示例,不会产生任何错误:
import matplotlib.pyplot as plt
for i in range(30):
plt.figure()
plt.plot(range(i+3), range(i+3))
plt.grid('on')
plt.close()
plt.show() # doesn't show anything since no figure is open
因此,错误的原因必须是代码中的其他位置。
答案 1 :(得分:0)
您应该直接对matplotlib对象进行操作。它不那么含糊不清:
fig, ax = plt.subplots()
ax.plot(x, y)
...
plt.close(fig)