6

次のようにmatplotlibプロットを更新しようとしています:

import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import numpy as np

plt.ion()

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

for i,(_,_,idx) in enumerate(local_minima):
    dat = dst_data[idx-24:idx+25]
    dates,values = zip(*dat)
    if i == 0:
        assert(len(dates) == len(values))
        lines2d, = ax.plot_date(mdate.date2num(dates), np.array(values), linestyle='-')
    else:
        assert(len(dates) == len(values))
        lines2d.set_ydata(np.array(values))
        lines2d.set_xdata(mdate.date2num(dates))  #This line causes problems.

        fig.canvas.draw()
    raw_input()

初めてループを通過すると、プロットは問題なく表示されます。ループを 2 回目にすると、プロット上のすべてのデータが消えます。行を含めなければ、すべて正常に機能しますlines2d.set_xdata(もちろん、x データ ポイントが間違っていることを除いて)。私は次の投稿を見てきました:

matplotlib でプロットを更新するには?

matplotlib の行を更新する

ただし、どちらの場合も、ユーザーは のみを更新してydataおり、私も を更新したいと考えてxdataいます。

4

1 に答える 1

6

よくあることですが、質問を書き出すという行為は、以前は考えもしなかった可能性を探るきっかけになりました。X データ更新されていますが、プロット範囲は更新されていません。プロットに新しいデータを配置したとき、すべて範囲外でした。解決策は次を追加することでした:

ax.relim()
ax.autoscale_view(True,True,True)

(一部参照)


いつか他の誰かに役立つことを期待して、元の質問のコンテキストのコードを次に示します。

import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import numpy as np

plt.ion()

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

for i,(_,_,idx) in enumerate(local_minima):
    dat = dst_data[idx-24:idx+25]
    dates,values = zip(*dat)
    if i == 0:
        assert(len(dates) == len(values))
        lines2d, = ax.plot_date(mdate.date2num(dates), np.array(values), linestyle='-')
    else:
        assert(len(dates) == len(values))
        lines2d.set_ydata(np.array(values))
        lines2d.set_xdata(mdate.date2num(dates))  #This line causes problems.
        ax.relim()
        ax.autoscale_view(True,True,True)
        fig.canvas.draw()
    raw_input()
于 2012-10-28T03:45:24.860 に答える