私は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()
最初のプロット コマンドは からのプロットを生成し[0,1]
、すべて問題なく確認できます。最後に、y データ配列は から になり、[0,10)
その大部分は より大きくなります1
が、図の y 制限は のままです[0,1]
。
を使用して制限を手動で変更できることはわかっていますpyplot.ylim(...)
が、何に変更すればよいかわかりません。for
ループ内で、初めてプロットする場合と同じように制限をスケーリングするように pyplot に指示できますか?
ベストアンサー1
軸の 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()