Python PLT:近距离或清晰的数字不起作用



我生成了许多用脚本的数字,我不显示这些脚本,而是存储到硬盘驱动器。一段时间后,我收到消息

/usr/lib/pymodules/python2.7/matplotlib/pyplot.py:412:RuntimeWarning:已打开了20多个数字。保留通过Pyplot接口(matplotlib.pyplot.figure)创建的数字,直到明确关闭并可能消耗过多的内存为止。(要控制此警告,请参见RCPARAM figure.max_num_figures)。 max_open_warning,runtime warnning)

因此,我试图在存储后关闭或清除数字。到目前为止,我尝试了所有以下内容,但没人能做。我仍然从上面收到消息。

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时遇到的错误:

无法调用"事件"命令:应用程序已被销毁 执行"事件生成$ w<>"时 (程序" TTK :: themechanged"第6行) 从" ttk :: themechanged"中调用

关闭数字的正确方法是使用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)。

这并不能真正解决我的问题,但是要处理我面对的高内存消耗,并且我没有像以前一样收到任何错误消息:

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")

plt.show()是一个阻止函数,因此在上述代码中,plt.close()将直到无花果窗口关闭后才能执行。您可以在代码开始时使用plt.ion()使其无障碍物。即使这具有其他含义,无花果也将关闭。

i在Python 3.9.7,Matplotlib 3.5.1和VS代码上仍然存在相同的问题(plt.close()没有组合的问题关闭了图)。我有三个循环,最内部循环绘制了20个以上的数字。对我有用的解决方案是在plt.close(someFig)之后使用agg作为后端和del someFig。随后,代码顺序将是:

import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
someFig = plt.figure()
.
.
.
someFig.savefig('OUTPUT_PATH')
plt.close(someFig) # --> (Note 1)
del someFig
.
.
.

  • 注1:如果删除了此行,则可能无法正确绘制输出数字!尤其是当图中要渲染的元素数量很高时。
  • 注2:我不知道该解决方案是否可以适得其反,但至少它在工作,不拥抱RAM或阻止绘制图形!

最新更新