编辑:我的问题不在于"动画"本身。我的问题是,如何在for循环中连续显示,新 内嵌 图像,在Ipython笔记本中。
本质上,我想在同一位置显示更新的图像,内联,并在循环内更新以显示。所以我的代码目前看起来像这样:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from IPython import display
%matplotlib inline
fig, ax = plt.subplots(nrows = 1, ncols = 1, figsize=(10, 10))
for ii in xrange(10):
im = np.random.randn(100,100)
ax.cla()
ax.imshow(im, interpolation='None')
ax.set_title(ii)
plt.show()
问题是,目前这只是...,好吧,显示第一张图片,然后它永远不会改变。
相反,我希望它只是在同一个地方的每个迭代内联显示更新的图像。我怎么做?感谢。
答案 0 :(得分:2)
每次向图中添加新内容时,都可以调用figure.canvas.draw()
。这将刷新图表(来自here)。尝试:
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from IPython import display
from time import sleep
fig = plt.figure()
ax = fig.gca()
fig.show()
for ii in range(10):
im = np.random.randn(100, 100)
plt.imshow(im, interpolation='None')
ax.set_title(ii)
fig.canvas.draw()
sleep(0.1)
然而,我无法在IPython笔记本中测试它。
答案 1 :(得分:2)
我不确定你能否在没有动画的情况下做到这一点。一旦绘图结束,笔记本就会捕获matplotlib的输出以包含在单元格中。动画框架非常通用,涵盖了任何非静态图像。 matplotlib.animation.FuncAnimation可能会做你想做的事。
我修改了你的代码如下:
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation
f = plt.figure()
ax = f.gca()
im = np.random.randn(100,100)
image = plt.imshow(im, interpolation='None', animated=True)
def function_for_animation(frame_index):
im = np.random.randn(100,100)
image.set_data(im)
ax.set_title(str(frame_index))
return image,
ani = matplotlib.animation.FuncAnimation(f, function_for_animation, interval=200, frames=10, blit=True)
注意:您必须重新启动笔记本才能使%matplotlib notebook
生效并使用支持动画的后端。
plt.pause(0.5)
语句也应该有效。