如何在 matplotlib 中加速动画

How to speed up an animation in matplotlib

我已经尝试减少 interval 参数,顺便说一下,它只绘制了大于 1 的值。例如,当我尝试 interval=0.05 时, pycharm 生成了一个空图。我还想知道如何以 gif 格式保存这些动画。目前的代码如下所示:

fig= plt.figure()
    plt.xlabel("x/M")
    plt.ylabel("y/M")
    circle = Circle((0, 0), 3 * math.sqrt(3), color='dimgrey')
    plt.gca().add_patch(circle)
    plt.gca().set_aspect('equal')
    ax = plt.axes()
    ax.set_facecolor("black")
    plt.axis([-1 / u1 - 5, 1 / u1 + 5, -1 / u1 - 5, 1 / u1 + 5])
    graph, = plt.plot([],[],'o', color="gold", markersize=2)
    def animate(i):
        graph.set_data(x[:i+1],y[:i+1])
        return graph
    ani = FuncAnimation(fig, animate, repeat=False, interval=1)
    ani.save('orbita.gif', writer='imagemagick', fps=30)

interval 用于生成动画时屏幕上的速度。它以毫秒为单位,应该是一个整数。设置 interval=1 已经比大多数计算机显示帧的速度快。

要改变.gif的速度,你需要'ani.save'的fps参数,例如anim.save('test.gif', writer='imagemagick', fps=60)就是每秒60帧,所以1 秒内 60 张图像。 (100 fps 是 .gif 格式允许的最大值,但大多数应用程序无法快速显示图像,大多数屏幕更新也不会那么快。因此,30 fps 通常是一个不错的选择。)

如果您的数据很长,您可能希望使用较少的帧,并在一个 animate() 步骤中添加更多的点。这是一个在每一步增加 20 个点的例子。

graph, = plt.plot([],[],'o', color="gold", markersize=2)

def animate(i):
    graph.set_data(x[:i*20],y[:i*20])
    return graph,  # the comma is needed here

ani = FuncAnimation(fig, animate, repeat=False, interval=1, frames=len(x)//20)
ani.save('orbita.gif', writer='imagemagick', fps=30)

还要确保您的 xy 数组正确包含要显示的曲线点。并且这些点位于 plt.axis([-1 / u1 - 5, 1 / u1 + 5, -1 / u1 - 5, 1 / u1 + 5]) 设置的坐标范围内。作为检查,您可能只想绘制曲线,不带动画。