我正在使用 IPython notebook 创建一个演示。我在 pylab 内联模式下启动笔记本,例如ipython notebook --pylab=inline
,我想做的是逐步构建绘图,在后续单元格中修改绘图的各个方面,并在每次修改后重新显示图表。例如,我想要连续的单元格,
单元格 1:
from pandas.io.data import DataReader
from datetime import datetime
import matplotlib.pyplot as plt
goog = DataReader("GOOG", "yahoo", datetime(2000,1,1), datetime(2012,1,1))
close_vals = goog['Close']
plot(close_vals.index, close_vals.values)
CHART DISPLAYED INLINE
单元格 2:
xlim(datetime(2009,1,1), datetime(2010,1,1))
MODIFIED CHART DISPLAYED INLINE
但是,原始图表似乎没有进入后续单元格,并且 CELL 2 中显示的图表是空的。为了看到修改后的原始情节,我必须重新发出情节命令,
单元格 2:
plot(close_vals.index, close_vals.values)
xlim(datetime(2009,1,1), datetime(2010,1,1))
当我添加移动平均趋势线和标签时,这很快变得笨重和不雅。此外,从 IPython 控制台工作,这种逐步构建绘图的方法工作得很好。有人知道在笔记本中创建这种演示的更好方法吗?谢谢。
更新:
我的最终代码最终看起来像这样。
单元格 1:
from pandas.io.data import DataReader
from datetime import datetime
import matplotlib.pyplot as plt
goog = DataReader("GOOG", "yahoo", datetime(2000,1,1), datetime(2012,1,1))
close_vals = goog['Close']
fig, ax = subplots(1,1)
ax.plot(close_vals.index, close_vals.values,label='GOOG Stock Price')
单元格 2:
ax.set_xlim(datetime(2009,1,1), datetime(2010,1,1))
fig
单元格 3:
avg_20 = [ sum(close_vals.values[i-20:i])/20.0 for i in range(20,len(close_vals))]
avg_20_times = close_vals.index[20:]
ax.plot(avg_20_times, avg_20, label='20 day trailing average')
ax.legend()
fig
在每个后续单元格中更新ax
后,调用fig
重新显示绘图;正是我想要的。谢谢!