我是python的新手,所以我理解这可能是一个愚蠢的问题,但我有动画这个问题。我无法看到错误是什么。我收到这个错误 TypeError:f()缺少1个必需的位置参数:'
我想在制作动画时使用matplotlib,因为我没有下载scitools。
任何帮助都会非常适合
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
x = np.linspace(-6, 6)
tmax = 1
tmin = -1
t = np.linspace(-1, 1)
def f(x, t):
term = (np.exp(-1*(x-3*t)**2))*np.sin(3*np.pi*(x-t))
return term
max_f = f(x[-1], t[-1])
plt.ion()
y = f(x, tmax)
lines = plt.plot(x, y)
plt.axis([x[0], x[-1], -0.1, max_f])
plt.xlabel('x')
plt.ylabel('f')
counter = 0
for ts in t:
y = f(x, t)
lines[0].set_ydata(y)
plt.legend(['ts=%4.2f' % ts])
plt.draw()
plt.savefig('tmp_%04d.png' % counter)
counter += 1
fig = plt.figure()
anim = animation.FuncAnimation(fig, f, interval = 1000, blit=True)
fig = plt.figure()
plt.axis([x[0], x[-1], -0.1, max_f])
lines = plt.plot([], [])
plt.xlabel('x')
plt.ylabel('f')
plt.show()
编辑,完整追溯: Tkinter回调中的异常 Traceback(最近一次调用最后一次): 文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ tkinter__init __。py",第1699行,调用 return self.func(* args)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ tkinter__init __。py",第745行,在callit中 FUNC(*参数)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ backends \ backend_tkagg.py",第370行,在idle_draw中 self.draw()
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ backends \ backend_tkagg.py",第351行,正在绘制 FigureCanvasAgg.draw(个体)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ backends \ backend_agg.py",第464行,正在绘制 self.figure.draw(self.renderer)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ artist.py",第63行,在draw_wrapper中 画(艺术家,渲染器,* args,** kwargs)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ figure.py",第1151行,正在绘制 self.canvas.draw_event(渲染)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ backend_bases.py",第1823行,在draw_event中 self.callbacks.process(s,event)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ cbook.py",第554行,正在处理中 代理(* args,** kwargs)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ cbook.py",第416行,调用 返回mtd(* args,** kwargs)
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ animation.py",第881行,在_start中 self._init_draw()
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ animation.py",第1540行,_init_draw self._draw_frame(下一个(self.new_frame_seq()))
文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ matplotlib \ animation.py",第1562行,在_draw_frame中 self._drawn_artists = self._func(framedata,* self._args)
TypeError:f()缺少1个必需的位置参数:' t'
答案 0 :(得分:0)
如上所述,这并不是关于错误,您可以通过在FuncAnimation中为t
提供fargs
的某些值来轻松防止错误。但是,这根本不会导致代码产生动画,因此如上所述,从exmaple开始逐步添加您的函数和代码,看看会发生什么。
这最终将导致类似以下内容:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
x = np.linspace(-6, 6)
tmax = 1
tmin = -1
t = np.linspace(-1, 1)
def f(x, t):
term = (np.exp(-1*(x-3*t)**2))*np.sin(3*np.pi*(x-t))
return term
y = f(x, tmax)
lines = plt.plot(x, y)
plt.axis([x[0], x[-1], -1, 1])
plt.xlabel('x')
plt.ylabel('f')
counter = [0]
def animate(ts):
y = f(x, ts)
lines[0].set_ydata(y)
plt.legend(['ts=%4.2f' % ts])
#plt.savefig('tmp_%04d.png' % counter)
counter[0] += 1
anim = animation.FuncAnimation(plt.gcf(), animate, frames = t, interval = 1000)
plt.show()