不使用 setData 的完整图形的 Matplotlib 电影

Matplotlib movies from complete figures without using setData

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

原因:我经常使用自定义函数创建中等复杂的图形,其形式类似于plotme(ax, data, **options)。通常我在开发这些函数时并没有考虑动画,后来想通过在循环中调用绘图函数来为图形设置动画。我不想为每个帧将图中现有艺术家的功能逻辑更改为 "setData"。

虽然您显示的示例代码更新了现有的绘图对象,但您没有理由需要这样做。附加代码的关键部分是 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()