我生成了很多带有脚本的数字,我没有显示但存储到硬盘。过了一会儿,我收到了消息
/usr/lib/pymodules/python2.7/matplotlib/pyplot.py:412:RuntimeWarning:已打开超过20个数字。通过pyplot接口(
matplotlib.pyplot.figure
)创建的数字将保留,直到明确关闭并可能消耗太多内存。 (要控制此警告,请参阅rcParamfigure.max_num_figures
)。 max_open_warning,RuntimeWarning)
因此,我试图在存储后关闭或清除数字。到目前为止,我尝试了以下所有方法,但没有人工作。我仍然从上面得到消息。
plt.figure().clf()
plt.figure().clear()
plt.clf()
plt.close()
plt.close('all')
plt.close(plt.figure())
此外,我试图通过
来限制开放数字的数量plt.rcParams.update({'figure.max_num_figures':1})
下面是一段示例代码,其行为如上所述。我在我尝试过的地方添加了我尝试作为评论的不同选项。
from pandas import DataFrame
from numpy import random
df = DataFrame(random.randint(0,10,40))
import matplotlib.pyplot as plt
plt.ioff()
#plt.rcParams.update({'figure.max_num_figures':1})
for i in range(0,30):
fig, ax = plt.subplots()
ax.hist([df])
plt.savefig("/home/userXYZ/Development/pic_test.png")
#plt.figure().clf()
#plt.figure().clear()
#plt.clf()
#plt.close() # results in an error
#plt.close('all') # also error
#plt.close(plt.figure()) # also error
要完成,这是我在使用plt.close
时遇到的错误:
无法调用“event”命令:应用程序已被破坏 执行“event generate $ w<>”时 (程序“ttk :: ThemeChanged”第6行) 从“ttk :: ThemeChanged”
中调用
答案 0 :(得分:1)
关闭数据的正确方法是使用plt.close(fig)
,可以在下面编辑您最初发布的代码中看到。
from pandas import DataFrame
from numpy import random
df = DataFrame(random.randint(0,10,40))
import matplotlib.pyplot as plt
plt.ioff()
for i in range(0,30):
fig, ax = plt.subplots()
ax.hist(df)
name = 'fig'+str(i)+'.png' # Note that the name should change dynamically
plt.savefig(name)
plt.close(fig) # <-- use this line
您在问题末尾描述的错误告诉我您的问题不在于matplotlib,而在于您的代码的其他部分(例如ttk
)。
答案 1 :(得分:0)
plt.show()是一个阻止函数,因此在上面的代码中,plt.close()在关闭无花果窗口之前不会执行。 您可以在代码的开头使用plt.ion()使其无阻塞。即使这有其他含义,无花果也将关闭。
答案 2 :(得分:-1)
这并没有真正解决我的问题,但它是一个解决我面临的高内存消耗的解决办法,我没有像以前那样得到任何错误消息:
from pandas import DataFrame
from numpy import random
df = DataFrame(random.randint(0,10,40))
import matplotlib.pyplot as plt
plt.ioff()
for i in range(0,30):
plt.close('all')
fig, ax = plt.subplots()
ax.hist([df])
plt.savefig("/home/userXYZ/Development/pic_test.png")