如何在 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)
还要确保您的 x
和 y
数组正确包含要显示的曲线点。并且这些点位于 plt.axis([-1 / u1 - 5, 1 / u1 + 5, -1 / u1 - 5, 1 / u1 + 5])
设置的坐标范围内。作为检查,您可能只想绘制曲线,不带动画。
我已经尝试减少 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)
还要确保您的 x
和 y
数组正确包含要显示的曲线点。并且这些点位于 plt.axis([-1 / u1 - 5, 1 / u1 + 5, -1 / u1 - 5, 1 / u1 + 5])
设置的坐标范围内。作为检查,您可能只想绘制曲线,不带动画。