为什么python在使用matplotlib进行绘图时会一直崩溃?

时间:2015-07-22 13:50:27

标签: python numpy matplotlib plot

我正在运行一个python代码,用于模拟和预测快速压缩机器内的条件(如温度,压力,化学物质等)。设置代码以便计算所有这些参数(保存在numpy数组中)的时间演变,然后将它们输出到一个函数,该函数根据时间创建并保存这些参数的图。

这些数组非常大,该函数使用matplotlib创建大约14个图。当我得到一个错误读取" python.exe已经停止工作"时,该函数将到达第7个图(有时更多,有时更少)。不确定它是否是一个记忆问题,因为情节太大或者正在发生什么。

我已尝试过两种方法(正如您在我的示例代码中看到的那样)plt.figure.clf()plt.close()。我甚至试过在两个地块之间做time.sleep。以下是我的函数的示例片段,它执行绘图(不是真实的代码,只是说明我的问题所必需的示例)。

我正在使用Windows,Python 2.7和Matplotlib 1.4.2

def graph_parameters(time, a, b, c, d, e):  #a,b,c,d,e are my parameters

    delay = 10

    plt.figure(1)
    plt.figure(facecolor="white")
    plt.plot(time, a)
    plt.ylabel('a')
    plt.xlabel('Time(s)')
    plt.savefig('fig1.png')
    plt.figure(1).clf()
    plt.close('all')
    time.sleep(delay)

    plt.figure(2)
    plt.figure(facecolor="white")
    plt.plot(time, b)
    plt.ylabel('b')
    plt.xlabel('Time(s)')
    plt.savefig('fig2.png')
    plt.figure(2).clf()
    plt.close('all')
    time.sleep(delay) 

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不完全确定,但我认为这是一个记忆问题。我找到了一种方法(来自另一个stackoverflow条目)来删除我不需要的变量。根据我上面的例子,如果我只想保持'时间_'和参数' a _',' b _',' c _',' d _'并且' e _',我在主代码的末尾运行以下内容:

graph_array = np.array([time_, a_, b_, c_, d_, e_])

#Delete variables that aren't going to be plotted in order to free up memory
attributes = sys.modules[__name__]

for name in dir():
   if name[0]!='_' and np.all( name!= np.array(['graph_array', 'attributes','np', 'gc', 'graph_parameters']) ):
     delattr(attributes, name)

gc.collect()

graph_parameters(*graph_array)

基本上for循环的作用是保留私有和神奇的函数名称和指定变量的名称,并删除所有其他名称。我从以下链接的答案中得到了这个想法。 How do I clear all variables in the middle of a Python script?

我在代码运行时看到了我的任务管理器,并且在开始保存图之前,Python的内存使用量(~1,600,000 K到~100,000 K)显着下降,表明此方法确实释放了内存。此外,没有崩溃。