2012-05-27 80 views
3

我想製作一系列圖(用於創建動畫),因此我想重新使用軸並保留所有圖的x和y限制,因此我設置了ax.autoscale(False)。但是,當我使用plt.cla()清除軸來繪製下一個圖像時,自動縮放設置將被覆蓋,因此我必須在每次迭代上設置ax.autoscale(False)以及x和y限制在matplotlib中清除軸時保留自動縮放

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 

所以我最終做ax.lines = []ax.lines.pop(),但是這迫使我設置顏色上的每個情節,以避免顏色循環。如果我將hold設置爲False,那麼每次撥打ax.plot()時都會重置自動縮放設置。有沒有其他的方式來保留軸屬性,同時刪除所有的地塊?

+0

爲什麼不更新藝術家的數據,而不是每次都調用'plot'? –

+0

不知道我該怎麼做。你會把它作爲答案嗎? – astrojuanlu

回答

4

不要致電plt.cla(),它會明確當前的軸。如果你想創建動畫,請使用matplotlib.pyplot.draw(),而不是重繪當前的數字,我認爲這是你想要的。

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() 

CookBook of Matplotlib在動畫上有一些很好的例子,你可能想看看。

+0

謝謝你的答案和食譜鏈接!我將檢查你的代碼和一些建議的性能改進。 – astrojuanlu

+0

好,關鍵是'line.set_data'技巧,它可以做我需要的魔法,但你的例子和出現在食譜中的例子對我來說似乎是無用的,因爲它們以'for'循環的速度更新動畫 - 頁面本身聲明信息非常過時,新的動畫API(http://matplotlib.sourceforge.net/api/animation_api.html)似乎更有價值。實際上,如果我在循環中添加一個'sleep()'調用,神祕地它不會更新直到I^C。 – astrojuanlu

+0

如果情節上的點正在移動,該怎麼辦?此方法僅適用於在每一步添加數據的情況,但如果刪除點或需要在其他座標處重新繪製數據,則不適用此方法。 – Kevlar

相關問題