在随后的IPython笔记本单元格中重新显示修改后的绘图

jer*_*dha 4 python matplotlib ipython

我正在使用IPython笔记本创建一个演示.我以pylab内联模式启动笔记本,例如ipython notebook --pylab=inline,我想要做的是逐步构建一个绘图,修改后续单元格中的绘图方面,并在每次修改后重新显示图表.例如,我想要连续的细胞,

CELL 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
Run Code Online (Sandbox Code Playgroud)

细胞2:

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

MODIFIED CHART DISPLAYED INLINE
Run Code Online (Sandbox Code Playgroud)

但是,原始图表似乎没有进入后续单元格,并且CELL 2中显示的图表为空.为了通过修改看原始图,我必须重新发出plot命令,

细胞2:

plot(close_vals.index, close_vals.values)
xlim(datetime(2009,1,1), datetime(2010,1,1))
Run Code Online (Sandbox Code Playgroud)

当我添加移动平均线趋势线和标签时,这很快变得笨重而且不优雅.此外,在IPython控制台上工作,这种逐步构建绘图的方法也可以正常工作.有谁知道在笔记本中创建这种演示的更好方法?谢谢.

更新:

我的最终代码最终看起来像这样.

CELL 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')
Run Code Online (Sandbox Code Playgroud)

细胞2:

ax.set_xlim(datetime(2009,1,1), datetime(2010,1,1))
fig
Run Code Online (Sandbox Code Playgroud)

细胞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
Run Code Online (Sandbox Code Playgroud)

ax在每个后续单元格中更新后,调用fig重新显示图表; 正是我在寻找的东西.谢谢!

HYR*_*YRY 5

您可以使用变量来引用图形和Axe对象:

在单元格1中:

fig, ax = subplots(1, 1)
plot(randn(100));
Run Code Online (Sandbox Code Playgroud)

在单元格2中:

ax.set_xlim(20, 40)
fig
Run Code Online (Sandbox Code Playgroud)