matplotlib - savefig - pyplot update plot
When to use cla(), clf() or close() for clearing a plot in matplotlib? (2)
Matplotlib offers there functions:
cla() # Clear axis clf() # Clear figure close() # Close a figure window
The documentation doesn't offer a lot of insight into what the difference between these functions is. When should I use each function and what exactly does it do?
plt.cla() means clear current axis
plt.clf() means clear current figure
also, there's plt.gca() (get current axis) and plt.gcf() (get current figure)
Read more here: [Matplotlib, Pyplot, Pylab etc: What's the difference between these and when to use each?](http://queirozf.com/entries/matplotlib-pylab-pyplot-etc-what-s-the-different-between-these
There is just a caveat that I discovered today.
If you have a function that is calling a plot a lot of times you better use
plt.close(fig) instead of
fig.clf() somehow the first does not accumulate in memory. In short if memory is a concern use plt.close(fig) (Although it seems that there are better ways, go to the end of this comment for relevant links).
So the the following script will produce an empty list:
for i in range(5): fig = plot_figure() plt.close(fig) # This returns a list with all figure numbers available print(plt.get_fignums())
Whereas this one will produce a list with five figures on it.
for i in range(5): fig = plot_figure() fig.clf() # This returns a list with all figure numbers available print(plt.get_fignums())
From the documentation above is not clear to me what is the difference between closing a figure and closing a window. Maybe that will clarify.
If you want to try a complete script there you have:
import numpy as np import matplotlib.pyplot as plt x = np.arange(1000) y = np.sin(x) for i in range(5): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot(x, y) plt.close(fig) print(plt.get_fignums()) for i in range(5): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot(x, y) fig.clf() print(plt.get_fignums())
If memory is a concern somebody already posted a work-around in SO see: Create a figure that is reference counted