将matplotlib映像保留在内存中,直到可以进行绘制为止

问题描述

我遇到这样的情况:循环执行一些计算,然后绘制结果并为每个图分配分数。最后,我按它们的分数以降序对图进行排序。也许需要前四分之一,其余的则丢弃。然后,我用保存的图像生成一个html文件

打印和保存会减慢该过程。有什么方法可以将matplotlib图像存储在内存中?

对于MCVE,请考虑以下代码

from matplotlib import pyplot as plt
import random

score_list = []
for a in range(50):
    score = random.random()
    fig = plt.figure()
    ax = plt.subplot2grid((1,1),(0,0))
    ax.plot([0,0],[1,1],'r--')
    fig.savefig('{}.png'.format(a))
    plt.close(fig)
    score_list.append(['{}.png'.format(a),score])

sorted_score_list = sorted(score_list,key=lambda x: x[1],reverse=True)
print(sorted_score_list)

MCVE可能简化了该问题。计分实际上决定了要绘制的内容。携带这些信息并延迟打印是不可撤消的,但是我想知道是否还有其他解决方案可以在内存中保留一定数量的图像。

解决方法

您可以通过影响图形的特定索引,然后在以后使用相同索引来获取它们,来实现所需的目标:

from matplotlib import pyplot as plt
import random

score_list = []
for a in range(50):
    score = random.random()
    fig = plt.figure(a)
    ax = plt.subplot2grid((1,1),(0,0))
    ax.plot([0,0],[1,1],'r--')
    score_list.append(['{}'.format(a),score])

sorted_score_list = sorted(score_list,key=lambda x: x[1],reverse=True)

# Saving the first 10 ones by score
for idx,score in sorted_score_list[:10]:
    fig = plt.figure(idx)
    fig.savefig('{}.png'.format(idx))
    plt.close(fig)