来自完整数字的Matplotlib电影,不使用setData

时间:2017-04-10 16:43:35

标签: python animation matplotlib movie

我有兴趣使用matplotlib制作电影。我到目前为止看到的示例,例如this one for moviewriter,似乎让您为每个帧就地编辑数据。这非常有效,避免重新绘制每次保持相同的图像部分。但是,快速数据探索可能很笨拙。我想要一个配方,让我简单地将完全绘制的图形作为每个帧(每次清除相同的图形对象都很好)。

原因是:我经常使用自定义函数创建中等复杂的数字,形式为plotme(ax, data, **options)。我经常在没有动画的情况下开发这些函数,后来想通过在循环中调用绘图函数来设置图形的动画。我不想在每个帧的图中将函数的逻辑更改为现有艺术家的“setData”。

1 个答案:

答案 0 :(得分:2)

虽然您显示的示例代码更新了现有的绘图对象,但您没有必要这样做。附加代码的关键部分是writer.grab_frame(),它只是获取当前数字的屏幕截图。

以下是不使用现有绘图对象的示例

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as manimation

FFMpegWriter = manimation.writers['ffmpeg']
metadata = dict(title='Movie Test', artist='Matplotlib',
                comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata)

fig = plt.figure()

with writer.saving(fig, "writer_test.mp4", 100):
    for k in range(10):
        # Create a new plot object
        plt.plot(range(k), range(k), 'o')
        writer.grab_frame()