如何解决__init__() 得到了一个意外的关键字参数“extra_args”`
我正在尝试为磁场和电场中的粒子轨迹创建动画。
我用下面的代码走到了死胡同。出现错误
MovieWriter ffmpeg 不可用;改用枕头。 回溯(最近一次调用最后一次): 文件“C:\Users\rexal.LAPTOP-T90ADT0B\PycharmProjects\pythonProject\Q2.py”,第 94 行,在 显示动画(动画) 文件“C:\Users\rexal.LAPTOP-T90ADT0B\PycharmProjects\pythonProject\Q2.py”,第 48 行,在 display_animation 返回 HTML(anim_to_html(anim)) 文件“C:\Users\rexal.LAPTOP-T90ADT0B\PycharmProjects\pythonProject\Q2.py”,第 59 行,anim_to_html anim.save(f.name,fps=20,extra_args=['-vcodec','libx264','-pix_fmt','yuv420p']) 文件“C:\Users\rexal.LAPTOP-T90ADT0B\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\animation.py”,第1117行,保存 writer = writer_cls(fps,**writer_kwargs) 类型错误:init() 得到了意外的关键字参数“extra_args”
import numpy as np
import matplotlib.pyplot as p
from scipy.integrate import ode
from IPython.display import HTML
from tempfile import NamedTemporaryFile
import base64
from matplotlib import animation
def newton(t,Y,q,m,B,E):
"""Computes the derivative of the state vector y according to the equation of motion:
Y is the state vector (x,y,z,u,v,w) === (position,velocity).
returns dY/dt.
"""
x,z = Y[0],Y[1],Y[2]
u,w = Y[3],Y[4],Y[5]
alpha = q / m
return np.array([u,w,alpha * B * w + E,-alpha * B * v])
#-------------------------------------
r = ode(newton).set_integrator('dopri5')
t0 = 0
x0 = np.array([0,0])
v0 = np.array([1,1,0])
initial_conditions = np.concatenate((x0,v0))
r.set_initial_value(initial_conditions,t0).set_f_params(1.0,1.0,10.)
positions = []
t1 = 50
dt = 0.05
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
positions.append(r.y[:3])
positions = np.array(positions)
#----------------------------------
def display_animation(anim):
p.close(anim._fig)
return HTML(anim_to_html(anim))
VIDEO_TAG = """<video controls>
<source src="data:video/x-m4v;base64,{0}" type="video/mp4">
Your browser does not support the video tag.
</video>"""
def anim_to_html(anim):
if not hasattr(anim,'_encoded_video'):
f = NamedTemporaryFile(suffix='.mp4',delete=False)
anim.save(f.name,'yuv420p'])
f.flush()
video = open(f.name,"rb").read()
f.close()
anim._encoded_video = base64.b64encode(video).decode('utf-8')
return VIDEO_TAG.format(anim._encoded_video)
#-------------------------------------------------
FRAMES = 50
fig = p.figure()
ax = fig.add_subplot(111,projection='3d')
def init():
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# animation function. This is called sequentially
def animate(i):
current_index = int(positions.shape[0] / FRAMES * i)
ax.cla()
ax.plot3D(positions[:current_index,0],positions[:current_index,1],2])
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# call the animator.
anim = animation.FuncAnimation(fig,animate,init_func=init,frames=FRAMES,interval=100)
# call our new function to display the animation
display_animation(anim)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。