在后续的IPython笔记本单元中重新显示修改后的图表

4
我正在使用IPython笔记本创建演示。我以pylab inline模式启动笔记本,例如 ipython notebook --pylab=inline,我想逐步构建一个图形,在随后的单元格中修改图形的各个方面,并在每次修改后重新显示图表。例如,我希望有连续的单元格,
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

第二单元:

xlim(datetime(2009,1,1), datetime(2010,1,1))

MODIFIED CHART DISPLAYED INLINE

然而,原始图表似乎没有在随后的单元格中呈现出来,在CELL 2中显示的图表是空的。为了看到带有修改的原始图形,我必须重新发出绘图命令。
CELL 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')

第二个单元格:

ax.set_xlim(datetime(2009,1,1), datetime(2010,1,1))
fig

第三个单元格:

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会重新显示图表;这正是我所期望的。谢谢!

1个回答

5
您可以使用变量引用图形和Axe对象:
在第1个单元格中:
fig, ax = subplots(1, 1)
plot(randn(100));

在第2个单元格中:
ax.set_xlim(20, 40)
fig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接