5

我正在为以后的动画绘制和保存数千个文件,如下所示:

import matplotlib.pyplot as plt
for result in results:
    plt.figure()
    plt.plot(result)                     # this changes
    plt.xlabel('xlabel')                 # this doesn't change
    plt.ylabel('ylabel')                 # this doesn't change
    plt.title('title')                   # this changes
    plt.ylim([0,1])                      # this doesn't change
    plt.grid(True)                       # this doesn't change
    plt.savefig(location, bbox_inches=0) # this changes

当我运行这个有很多结果时,它会在保存数千个图后崩溃。我想我想做的是像这个答案一样重用我的轴:https ://stackoverflow.com/a/11688881/354979但我不明白如何。我该如何优化它?

4

2 回答 2

4

我会创建一个图形并每次清除该图形(使用.clf)。

import matplotlib.pyplot as plt

fig = plt.figure()

for result in results:
    fig.clf()   # Clears the current figure
    ...

由于每次调用plt.figure都会创建一个新的图形对象,因此您的内存不足。根据@tcaswell 的评论,我认为这会比.close. 差异解释如下:

何时使用 cla()、clf() 或 close() 清除 matplotlib 中的绘图?

于 2013-08-13T17:28:32.693 回答
2

虽然这个问题很老,但答案是:

import matplotlib.pyplot as plt
fig = plt.figure()
plot = plt.plot(results[0])
title = plt.title('title')

plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.ylim([0,1])
plt.grid(True)

for i in range(1,len(results)):
    plot.set_data(results[i])
    title.set_text('new title')
    plt.savefig(location[i], bbox_inches=0)
plt.close('all')
于 2016-09-22T14:30:28.833 回答