问候,我想问一下Python的FuncAnimation
。
在完整的代码中,我试图对条形图进行动画处理(用于整体插图(。动画输出来自
ani = FuncAnimation(fig, update, frames=Iter, init_func = init, blit=True);
plt.show(ani);
看起来不错。
但是输出的视频来自
ani.save("example_new.mp4", fps = 5)
给出的版本与 Python 中显示的动画略有不同。输出给出了与动画相比的">叠加版本"的视频。与动画不同:在视频中,在每一帧中,以前的情节都与当前情节一起显示。
这是完整的代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
Num = 20
p = plt.bar([0], [0], 1, color = 'b')
Iter = tuple(range(2, Num+1))
xx = list(np.linspace(0, 2, 200)); yy = list(map(lambda x : x**2,xx));
def init():
ax.set_xlim(0, 2)
ax.set_ylim(0, 4)
return (p)
def update(frame):
w = 2/frame;
X = list(np.linspace(0, 2-w, frame+1));
Y = list(map(lambda x: x**2, X));
X = list(map(lambda x: x + w/2,X));
C = (0, 0, frame/Num);
L = plt.plot(xx , yy, 'y', animated=True)[0]
p = plt.bar(X, Y, w, color = C, animated=True)
P = list(p[:]); P.append(L)
return P
ani = FuncAnimation(fig, update, frames=Iter, init_func = init, interval = 0.25, blit=True)
ani.save("examplenew.mp4", fps = 5)
plt.show(ani)
如能就此提出任何建设性意见,将不胜感激。谢谢。问候,阿里夫。
保存动画时,不使用块。您可以关闭块传输,即 blit=False
并以与保存动画相同的方式查看动画。
正在发生的事情是,在每次迭代中都会添加一个新图,而不会删除最后一个图。您基本上有两种选择:
- 清除中间的轴,
ax.clear()
(然后记住再次设置轴限制( - 更新条形图和图的数据。执行此操作的示例:
- 对于
plot
:Matplotlib实时更新图 - 对于
bar
:在 matplotlib 中动态更新条形图
- 对于