How to dynamically update a plot in a loop in IPython notebook (within one cell)
Solution 1:
Use the IPython.display
module:
%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)
Solution 2:
A couple of improvement's on HYRY's answer:
- call
display
beforeclear_output
so that you end up with one plot, rather than two, when the cell is interrupted. - catch the
KeyboardInterrupt
, so that the cell output isn't littered with the traceback.
import matplotlib.pylab as plt
import pandas as pd
import numpy as np
import time
from IPython import display
%matplotlib inline
i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
try:
plt.plot(pd.Series(data=np.random.randn(100), index=i))
display.display(plt.gcf())
display.clear_output(wait=True)
time.sleep(1)
except KeyboardInterrupt:
break