2012-06-11 61 views
24

私はmatplotlibを使ってPythonでデータをプロットしています。いくつかの計算に基づいてプロットのデータを更新していて、ylimとxlimを自動的に再スケーリングしたいと思っています。代わりに、スケールは初期プロットの限界に基づいて設定されます。 MWEはmatplotlibのylimとxlimの自動調整

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 
    pyplot.draw() 

ある最初のプロットコマンドは[0,1]からプロットを生成して、私はすべてがうまく見ることができます。最後に、yデータ配列は[0,10)から多くのものが1より大きくなりますが、数字のy制限は[0,1]のままです。

私は手動でpyplot.ylim(...)を使用して制限を変更することができますが、どのように変更するかわかりません。 forループでは、最初にプロットされたように限界を拡大するようにpyplotに伝えることはできますか?

+2

:http://stackoverflow.com/a/3215060/623518とhttp://stackoverflow.com/a/7198623/623518 – Chris

答えて

34

軸のdataLimを更新し、続いてdataLimに基づいて軸のviewLimを更新する必要があります。適切なメソッドはaxes.relim()およびax.autoscale_view()メソッドです。これら二つの関連の回答を参照してください

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 

ax = pyplot.gca() 

# recompute the ax.dataLim 
ax.relim() 
# update ax.viewLim using the new dataLim 
ax.autoscale_view() 
pyplot.draw() 
+7

注場合は、その あなたの例では、次にようになります。以前は同じ軸で 'set_xlim()'を使いましたが、 'autoscale_view()'は動作しません。この場合、代わりに 'autoscale()'を使うべきです(1.5.xでテスト済み)。 –

関連する問題