I want to make a series of plots (meant for creating an animation) and thus I want to reuse the axes and preserve the x and y limits across all plots, so I set ax.autoscale(False)
. However, when I clear the axes using plt.cla() to draw the next image, the autoscale setting is overridden so I have to set ax.autoscale(False)
and the x and y limits on every iteration.
In [49]: fig = plt.figure(1)
In [50]: ax = fig.add_subplot(1, 1, 1)
In [59]: ax.get_autoscale_on()
Out[59]: True
In [60]: ax.autoscale(False)
In [61]: ax.get_autoscale_on()
Out[61]: False
In [62]: plt.cla()
In [63]: ax.get_autoscale_on()
Out[63]: True
so I end up doing ax.lines = []
or ax.lines.pop()
, but this forces me to set the color on each plot to avoid the color cycling. If I set hold
to False
, then the autoscale setting is reset every time I call ax.plot()
. Is there any other way to preserve the axes properties while removing all plots?
Don't call plt.cla()
, it will clear current axes. If you want to create animation, use matplotlib.pyplot.draw()
instead which will redraw the current figure and I think it's what you want.
from pylab import *
import matplotlib.pyplot as plt
ion()
ax=plt.subplot(111)
line1, = ax.plot(x,y,label='x')
for i in xrange(20):
#update your data to new x,y
line1.set_xdata(x)
line1.set_ydata(y)
draw()
The CookBook of Matplotlib has some good examples on animations, you may want to check it out.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With