以下脚本在使用Canopy 1.4.1中的%run
语句执行时生成一个正在行进的正弦波的简单动画:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
def animator():
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
x = np.linspace(0, 2, 1000)
y = np.sin(2 * np.pi * (x - 0.01 * i))
line.set_data(x, y)
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=200, interval=20, blit=True)
plt.show()
animator()
但是,如果我删除最后一行,请使用%run
运行脚本并从解释器调用animator()
,只在屏幕上绘制第一帧。为什么是这样?如何进行函数调用以在Canopy中生成动画?
奇怪的是,在IDLE或IPython(PyLab)中都不会出现这个问题,从解释器调用animator()
可以正常工作。更重要的是,问题仅限于交互式显示:如果我向animator
添加更多行以将动画保存为mp4格式,则即使从Canopy也能正确保存mp4文件。
上面的代码基于Jake Vanderplas的教程。
答案 0 :(得分:1)
我已经找到了问题第二部分的答案:按照建议in this answer,我必须拥有return anim
函数。但我仍然有些困惑,为什么Canopy和其他解释器在这里表现不同。 (为什么IDLE和PyLab有效?)任何见解都会受到赞赏!