run - python plotly library




ipythonノートブックのループ内のプロットを動的に更新する方法(1つのセル内) (3)

環境:Python 2.7、matplotlib 1.3、IPythonノートブック1.1、linux、chrome。 コードは1つの入力セルにあり、-- --pylab=inline

私はストリームを消費し、5秒ごとにプロットを動的に更新するために、IPythonのノートブックとパンダを使用したいと思います。

私はprintステートメントを使ってテキスト形式のデータを印刷すると、それは完璧に動作します。出力セルはデータの印刷と新しい行の追加だけを続けます。 しかし、私がデータをプロットしようとすると、それをループで更新すると、プロットは決して出力セルに表示されません。 しかし、私がループを削除したら、一度それをプロットしてください。 それはうまく動作します。

それから私は簡単なテストをしました:

i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
    plot(pd.Series(data=np.random.randn(100), index=i))
    #pd.Series(data=np.random.randn(100), index=i).plot() also tried this one
    time.sleep(5)

手動でプロセスを中断するまで出力は何も表示されません(ctrl + m + i)。 私はそれを中断した後、プロットは複数の重なった線として正しく表示されます。 しかし、私が実際に望むのは、5秒ごとに表示され、更新されるplot()あるいは、前述のprint文の出力と同様にplot()関数が呼び出されるたびに更新されます)。 セルが完全に完了した後の最終チャートのみを表示することは、私が望むものではありません。

私は明示的に各plot()後にdraw()関数を追加しようとしました。 IPythonノートブックの1つのセル内でfor / whileループを使ってプロットを動的に更新する方法を知りました。


IPython.displayモジュールを使用する:

%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
    pl.plot(pl.randn(100))
    display.clear_output(wait=True)
    display.display(pl.gcf())
    time.sleep(1.0)

plot()関数の後にshow()またはgcf().show()を追加してみてください。 これらは現在のFigureを強制的に更新します(gcf()は現在のFigureの参照を返します)。


これをさらに改善するには、 wait=Trueclear_output追加しclear_output

display.clear_output(wait=True)
display.display(pl.gcf())






ipython-notebook