【发布时间】:2020-09-03 14:44:28
【问题描述】:
我有一种情况,我在一个循环中执行一些计算,然后绘制结果并为每个图分配一个分数。最后,我按分数降序对图进行排序。也许需要上四分之一,其余的被丢弃。然后我用保存的图像生成一个 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 可能过度简化了问题。得分实际上决定了绘制的内容。携带这些信息并延迟绘图是不可撤销的,但我想知道是否有其他解决方案可以在内存中保留一定数量的图像。
【问题讨论】:
-
为什么不将您的数字附加到列表中?
-
你的意思是 score_list.append([fig, score])?有时 matplotlib 会写入同一个图形。我还需要在循环中使用 plt.close(fig) 吗?
-
如果您每次都创建一个新图形,则不应该这样做。您甚至可以不将它们存储在列表中,稍后使用
get_fignums访问它们 -
你介意写一个答案让我测试一下吗?
标签: python matplotlib in-memory