Python,使用两个参数

时间:2017-10-17 15:16:40

标签: python function animation matplotlib

我是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'

1 个答案:

答案 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()

enter image description here