I have a loop like this
#!/usr/bin/env python import matplotlib.pyplot as p for i in xrange(N): # Create my_image here # Display this image p.figure() p.imshow(my_image) p.show() p.close()
This works fine when i=0. For the program to continue, I need to close the new figure created by pyplot. For all other loop iterations (i>0), another new figure is not created, a plot is not presented and the program just moves on. Why does closing a figure making pyplot unable to open new one (like MATLAB)?
The behavior which I expect is:
It might be from a bug in previous versions of matplotlib. I was having a similar problem when I issued sequential
show() commands -- only the first would show (and stay); but, when I updated matplotlib to 1.0.1 the problem went away.
There might be a better way to animate imshow's, but this should work in a pinch. It's a lightly modified version of an animation example from the docs.
# For detailed comments on animation and the techniqes used here, see # the wiki entry http://www.scipy.org/Cookbook/Matplotlib/Animations import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt import matplotlib.mlab as mlab import matplotlib.cm as cm import sys import numpy as np import time ax = plt.subplot(111) canvas = ax.figure.canvas delta=0.025 x=y= np.arange(-3.0, 3.0, delta) x,y=np.meshgrid(x, y) z1=mlab.bivariate_normal(x, y, 1.0, 1.0, 0.0, 0.0) z2=mlab.bivariate_normal(x, y, 1.5, 0.5, 1, 1) z=z2-z1 # difference of Gaussians def run(z): fig=plt.gcf() for i in range(10): plt.imshow(z, interpolation='bilinear', cmap=cm.gray, origin='lower', extent=[-3,3,-3,3]) canvas.draw() plt.clf() z**=2 manager = plt.get_current_fig_manager() manager.window.after(100, run, z) plt.show()