54

matplotlibを使用してPythonでデータをプロットしています。いくつかの計算に基づいてプロットのデータを更新しており、ylimとxlimを自動的に再スケーリングしたいと考えています。代わりに、最初のプロットの制限に基づいてスケールが設定されます。MWEは

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

最初のplotコマンドはからプロットを生成し、[0,1]すべてがうまく表示されます。最後に、y-data配列は、[0,10)そのほとんどが。より大きいもの1から始まりますが、図のy-limitはそのまま[0,1]です。

を使用して手動で制限を変更できることpyplot.ylim(...)は知っていますが、何に変更すればよいかわかりません。ループ内で、for初めてプロットされたかのように制限をスケーリングするようにpyplotに指示できますか?

4

1 に答える 1

73

軸の 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()
于 2012-06-14T18:34:45.920 に答える