在使用matplotlib批量绘制图片时,内存占用会随着绘制图片数量的增加而增加,最终内存不够,提示为:Out of memory
解决办法
1.在导入matplotlib库后,且在matplotlib.pyplot库被导入前加“matplotlib.use(‘agg’)”语句。注意matplotlib.use('agg')必须在本句执行import matplotlib.pyplot as plt前运行
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
matplotlib.use(‘agg’):作用是matplotlib设定为非交互式,在这种模式下,前端不会展示绘图结果
2.在每次绘图结束时,手动清除图片。如下代码所示:
plt.clf () #清除当前图形及其所有轴,但保持窗口打开,以便可以将其重新用于其他绘图。
plt.close () #完全关闭图形窗口
示例:
'''绘制5000张散点图'''
import numpy as np
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
for i in range(0,5000):
#1. 数据生成
x = np.random.normal(0, 1, 10)
y = np.random.normal(0, 1, 10)
#2.画布设置:
plt.figure(figsize=(10, 10), dpi=80)
axes=plt.subplot2grid((1,1), (0,0), facecolor='w')
#3.绘制散点图
plt.scatter(x,y, c='red', s=500)
#4.保存图片
plt.savefig('C:/Users/test/Desktop/'+str(i)+'.jpg')
plt.clf()
plt.close()
输出图例:
内存占用始终保持在600MB多同一水平,没有增加