如何在Matplotlib中为函数设置动画

时间:2017-08-24 03:23:02

标签: python animation matplotlib

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation


#make the figure
# - set up figure, set up axis(xlim,ylim), set up line as tuple for 
animation
fig = plt.figure()
ax = plt.axes(xlim=(-10,50), ylim=(1,50))
line, = ax.plot([],[], lw=2)

#initialization function - display bkgd for each frame
#line has function set data, return it as a tuple
def init():
    line.set_data([],[])
    return line,

speed = 0.01

#animation function - this is where the physics goes
def animate(i): #i is animation frames
    x = np.linspace(0,2,100) #creates set of num evenly spaces from 0,2
    y = (x - speed * i)+(((x - speed * i)^2)/2)+(((x - speed * i)^3)/6)
    line.set_data(x,y)
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init,frames=100, 
interval=20, blit=True)

plt.show()

我正在尝试使用无限系列定义近似“e ^ x”并将其绘制在图表上。

无论出于何种原因,此代码生成一个对话框,其中包含一小段时间的绘图,然后以退出代码1结束。

我很困惑为什么这不起作用。

1 个答案:

答案 0 :(得分:2)

计算y时,您会收到拼写错误。 Python中的取幂运算符是**,而不是^。如果您使用y = (x - speed * i)+(((x - speed * i) ** 2)/2)+(((x - speed * i) ** 3)/6),则原始问题中的代码会正常运行。

奇怪的是,你没有得到预期的追溯。例如,如果您尝试

x = np.ones(5)
x ^ 1

你会得到TypeError

Traceback (most recent call last):
  File "C:/Users/joshk/GitHubProjects/stackoverflow/b.py", line 5, in <module>
    x ^ 1
TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

似乎这个回溯在FuncAnimator内被抑制了。我掠过了source code,但没有任何东西跳出来引起压制。

进一步的调查表明,追溯的抑制可能是由PyCharm引起的,而不是matplotlib。