You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When plotting and saving a lot of spectrograms in a loop, there seems to be a memory leek. I'm aware that this is some kind of a common problem and I tried already all kind of combinations of plotting the figure new every step, reusing the figure, using plt.close(), plt.close('fig'), gc.collect(), plt.clf(), plt.cla(), but nothing really worked.
Interestingly, I could pinpoint that the leak does not appear or at least gets negligible when the yscale is not 'log'. Can someone give me a work around or has an idea how to set the axis to log without suffering the memory leak?
Code for reproduction
importgcimportpsutilimportosimportmatplotlib.pyplotaspltimportnumpyasnpprocess=psutil.Process(os.getpid())
# initial memory usagebytes_used_start=process.memory_info().rss# generate 10 min datafs=20000x=np.random.rand(fs*600)
foriinrange(10):
# create figurefig=plt.figure(figsize=(10,6))
ax=fig.add_axes([0, 0, 1, 1])
# plot spectrogramspectro, freqs, t, im=ax.specgram(
x=x,
NFFT=2**13,
Fs=fs
)
ax.axes.set_ylim((9.8,10000))
#ax.axes.set_yscale('log') # -> comment this line in for memory leakfig.savefig('C:/Temp/spectro_{}.jpg'.format(i))
# clean upplt.close(fig)
gc.collect()
# show memory usagebytes_used_cur=process.memory_info().rss-bytes_used_startprint('bytes used currently at step {} : {}'.format(i, bytes_used_cur))
Outcome yscale linear
bytes used currently at step 0 : 256192512
bytes used currently at step 1 : 257204224
bytes used currently at step 2 : 257437696
bytes used currently at step 3 : 257343488
bytes used currently at step 4 : 257519616
bytes used currently at step 5 : 257581056
bytes used currently at step 6 : 257515520
bytes used currently at step 7 : 257581056
bytes used currently at step 8 : 257449984
bytes used currently at step 9 : 257585152
Outcome yscale log
bytes used currently at step 0 : 42557440
bytes used currently at step 1 : 83501056
bytes used currently at step 2 : 122126336
bytes used currently at step 3 : 161177600
bytes used currently at step 4 : 199602176
bytes used currently at step 5 : 238022656
bytes used currently at step 6 : 276516864
bytes used currently at step 7 : 314994688
bytes used currently at step 8 : 353480704
bytes used currently at step 9 : 391954432
Matplotlib version
Operating system: Windows 7
Matplotlib version: '3.1.3'
Matplotlib backend: Qt5Agg
Python version: 3.7.4
The text was updated successfully, but these errors were encountered:
Bug report
When plotting and saving a lot of spectrograms in a loop, there seems to be a memory leek. I'm aware that this is some kind of a common problem and I tried already all kind of combinations of plotting the figure new every step, reusing the figure, using plt.close(), plt.close('fig'), gc.collect(), plt.clf(), plt.cla(), but nothing really worked.
Interestingly, I could pinpoint that the leak does not appear or at least gets negligible when the yscale is not 'log'. Can someone give me a work around or has an idea how to set the axis to log without suffering the memory leak?
Code for reproduction
Outcome yscale linear
Outcome yscale log
Matplotlib version
The text was updated successfully, but these errors were encountered: