将 matplotlib 图像保存在内存中,直到它准备好被绘制
Keeping matplotlib images in-memory until it is ready to be plotted
我有一种情况,在循环中,我执行一些计算,然后绘制结果并为每个图分配一个分数。最后,我按分数降序对地块进行排序。也许需要最高四分之一,其余的则丢弃。然后我用保存的图像生成一个 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)
我有一种情况,在循环中,我执行一些计算,然后绘制结果并为每个图分配一个分数。最后,我按分数降序对地块进行排序。也许需要最高四分之一,其余的则丢弃。然后我用保存的图像生成一个 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)