【发布时间】:2020-08-30 12:48:19
【问题描述】:
这是我第一次在这里发帖。我正在运行这个代码,它是一个 matplotlib(版本 3.2.1)动画示例,所以它应该可以正常工作。
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
plt.rcParams['animation.ffmpeg_path'] = '/opt/local/bin/ffmpeg'
# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
# initialization function: plot the background of each frame
def init():
line.set_data([], [])
return line
# animation function. This is called sequentially
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,
# call the animator. blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=200, interval=20, blit=True)
# save the animation as an mp4. This requires ffmpeg or mencoder to be
# installed. The extra_args ensure that the x264 codec is used, so that
# the video can be embedded in html5. You may need to adjust this for
# your system: for more information, see
# http://matplotlib.sourceforge.net/api/animation_api.html
anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
plt.show()
但是,我收到了这个错误:
Traceback(最近一次调用最后一次): 文件“matplotlib_animation.py”,第 42 行,在 anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264']) 文件“/home/leonardo/.local/lib/python3.6/site-packages/matplotlib/animation.py”,第 1102 行,保存 alt_writer = next(作家,无) TypeError:“MovieWriterRegistry”对象不是迭代器 /home/leonardo/.local/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3.py:195:警告:尝试删除源 ID 8 时未找到它 GLib.source_remove(self._idle_draw_id)
任何想法将不胜感激。
【问题讨论】:
-
几项检查: 1. 你能单独使用 plt.show() 看到你的动画吗(在评论你的 anim.save() 行之后)? 2.你用的是哪个版本的python?使用早于 3.2 的某些先前版本的 matplotlib 是否可以重现此问题? github.com/matplotlib/matplotlib/issues/16965
-
感谢您的回复。 1. 是的,我可以检查我的动画。 2.Python 3.6.9。我不知道这个问题在旧版本中是否可以重现。我在github上看到过这个问题,但是到现在还没有任何更新。
标签: python matplotlib animation ffmpeg