为什么从FuncAnimation保存的视频是重叠的地块?

关心,我想问一下关于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)

任何建设性的意见,将不胜感激。 谢谢。 问候,哀伤。


保存动画时,不使用blitting。 您可以关闭blitting,即blit=False并以与保存相同的方式查看动画。

发生的事情是,在每次迭代中添加一个新的图,而不删除最后一个图。 你基本上有两个选择:

  • 清除它们之间的轴, ax.clear() (然后记住再次设置轴限制)
  • 更新酒吧和情节的数据。 要做到这一点的例子:
  • 对于plot :Matplotlib实时更新图
  • 对于bar :动态更新matplotlib中的柱状图
  • 链接地址: http://www.djcxy.com/p/41235.html

    上一篇: Why is the saved video from FuncAnimation a superpositions of plots?

    下一篇: Text animation on Video