I\'d like to create different figures in Python using matplotlib.pyplot
. I\'d then like to save some of them to a file, while others should be shown on-screen using
Generally speaking, you can just close the figure. As a quick example:
import matplotlib.pyplot as plt
fig1 = plt.figure()
plt.plot(range(10), 'ro-')
plt.title('This figure will be saved but not shown')
fig1.savefig('fig1.png')
plt.close(fig1)
fig2 = plt.figure()
plt.plot(range(10), 'bo')
plt.title('This figure will be shown')
plt.show()
As far as whether or not the first plt.figure()
call is superflous, it depends on what you're doing. Usually, you want to hang on to the figure object it returns and work with that instead of using matplotlib's matlab-ish state machine interface.
When you're making more complex plots, it often becomes worth the extra line of code to do something like this:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(range(10))
The advantage is that you don't have to worry about which figure or axis is "active", you just refer to a specific axis or figure object.
The better way is to use plt.clf()
instead of plt.close()
.
Moreover plt.figure()
creates a new graph while you can just clear previous one with plt.clf()
:
import matplotlib.pyplot as plt
y1 = [4, 2, 7, 3]
y2 = [-7, 0, -1, -3]
plt.figure()
plt.plot(y1)
plt.savefig('figure1.png')
plt.clf()
plt.plot(y2)
plt.show()
plt.clf()
This code will not generate errors or warnings such can't invoke "event" command...