2011-08-25 54 views
23

我有多條線在同一軸上繪製,並且它們中的每一個都是動態更新的(我使用set_data),問題是我沒有意識到每個的x和y限制線。並且axes.autoscale_view(True,True,True)/ axes.set_autoscale_on(True)沒有做他們應該做的事情。我如何自動縮放我的座標軸?set_data和autoscale_view matplotlib

import matplotlib.pyplot as plt 

fig = plt.figure() 
axes = fig.add_subplot(111) 

axes.set_autoscale_on(True) 
axes.autoscale_view(True,True,True) 

l1, = axes.plot([0,0.1,0.2],[1,1.1,1.2]) 
l2, = axes.plot([0,0.1,0.2],[-0.1,0,0.1]) 

#plt.show() #shows the auto scaled. 

l2.set_data([0,0.1,0.2],[-1,-0.9,-0.8]) 

#axes.set_ylim([-2,2]) #this works, but i cannot afford to do this. 

plt.draw() 
plt.show() #does not show auto scaled 

我已經提到了這些已經,thisthis。 在我遇到的所有情況下,x,y限制是已知的。我對軸多行及其範圍改變,保持跟蹤YMAX的整個數據是不實際的

的探索讓我這個一點點,

xmin,xmax,ymin,ymax = matplotlib.figure.FigureImage.get_extent(FigureImage) 

但同樣在這裏,我不知道如何從Figure實例中訪問FigureImage。

使用matplotlib 0.99.3

回答

31

matplotlib docs for autoscale_view

的數據限制時,不會自動藝術家數據被更改後的藝術家已經被添加到一個軸實例更新。在這種情況下,請在調用autoscale_view之前使用matplotlib.axes.Axes.relim()。

所以,你需要的set_data電話後您的plt.draw()調用之前添加兩行:

axes.relim() 
axes.autoscale_view(True,True,True) 
+1

謝謝!這就像魅力一樣! – chaitu