3

I want to make a series of plots, and save each to a file. But I don't know how to wipe previous plots off. Maybe I need to create some new object for each time, but I don't which object that would be. Here is my code, notice the comment. This is my code:

import matplotlib.pyplot as plt
ind = (1,2,3,4)
groups=(
  (1, (1.1,1.2,1.3,1.4)),
  (2, (2.2,2.2,1.2,2.4)),
)

for group in reversed(groups):
  #clean the slate ?
  plt.bar(ind   ,group[1])
  plt.xticks([i+0.5 for i in ind],ind)
  plt.savefig('%d.png' % group[0])
Lucy Brennan
  • 585
  • 2
  • 7
  • 13

1 Answers1

5

DO NOT create a new figure each time with plt.figure(), you'll wind up running out of memory rather quickly. Instead use (for the figure and the axes respectively):

plt.clf()
plt.cla()

You can run plt.close() to free up the allocation, however there has been some discussion that this method has lead to memory leaks in the past. A quick test shows that in version 1.1.1rc this works without problems, so feel free to use it as an alternative. A useful related question discuses the differences between the methods.

Community
  • 1
  • 1
Hooked
  • 84,485
  • 43
  • 192
  • 261
  • 1
    Why do you say that reusing plt.figure will lead to memory issues? If you run plt.close() won't that free up the memory? – FakeDIY May 30 '12 at 15:37
  • @FakeDIY Yes calling `plt.close()` will free up the allocated memory. I'll edit the question to reflect this, thanks! – Hooked May 30 '12 at 15:45