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=True
をclear_output
追加しclear_output
。
display.clear_output(wait=True)
display.display(pl.gcf())