将 matplotlib 动画保存为 mp4

Posted

技术标签:

【中文标题】将 matplotlib 动画保存为 mp4【英文标题】:saving matplotlib animation as mp4 【发布时间】:2016-05-10 18:38:03 【问题描述】:

我想将以下程序的输出动画保存在mp4中。该程序确实创建了一个 mp4 文件,但该文件是一个空白文件,它不包含我想要的动画。我在这里做错了什么?

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation

plt.rcParams['animation.ffmpeg_path'] ='C:\\ffmpeg\\bin\\ffmpeg.exe'
fig=plt.figure()
ax=fig.add_subplot(111,projection="3d")

x=np.linspace(100,150,100)
t=(x-100)/0.5
y=-.01*np.cos(t)+.5*np.sin(t)+100.01
z=.01*np.sin(t)+.5*np.cos(t)+99.5

def animate(i):
    line.set_data(x[:i],y[:i])
    line.set_3d_properties(z[:i])

ax.set_xlim3d([min(x),max(x)])
ax.set_ylim3d([min(y),max(y)])
ax.set_zlim3d([min(z),max(z)])
ax.set_title("Particle in magnetic field") 
ax.set_xlabel("X")
ax.set_xlabel("Y")
ax.set_xlabel("Z")
line,=ax.plot([],[],[])
lin_ani=animation.FuncAnimation(fig,animate)
plt.legend()

FFwriter = animation.FFMpegWriter()
lin_ani.save('animation.mp4', writer = FFwriter, fps=10)
# plt.show()

【问题讨论】:

检查这个问题:***.com/questions/15443879/… 重复***.com/questions/42258439/… 这能回答你的问题吗? Saving matplotlib.animation outputs a 0 second video 【参考方案1】:

在函数末尾添加这一行

return line,

所以一个完整的函数应该是这样的:

def animate(i):
    line.set_data(x[:i],y[:i])
    line.set_3d_properties(z[:i])
    return line,

【讨论】:

以上是关于将 matplotlib 动画保存为 mp4的主要内容,如果未能解决你的问题,请参考以下文章

使用 matplotlib 保存散点图动画

无法使用 ffmpeg 保存 matplotlib 动画

在 pyqt5 gui 中显示 matplotlib 动画图并同时保存在 mp4 中的问题

使用matplotlib将3D散点图动画为gif最终为空

在 Python 中嵌入 Matplotlib 动画(google colab notebook)

将 matplotlib 动画嵌入到 tkinter 帧中