【发布时间】:2021-09-02 02:21:59
【问题描述】:
我使用 Matplotlib 动画类中的 FuncAnimation 创建了一个动画情节,我想将其保存为 .gif 文件。当我运行脚本时,输出看起来很正常,看起来像这样(动画效果很好):
但是,当我尝试使用 ImageMagick 或 PillowWriter 将动画图保存为 .gif 文件时,该图如下图所示:
线条显然要粗得多,总的来说,看起来很糟糕。问题归因于点(紫色和红色圆圈)。因此,似乎情节正在写在每一帧上(我认为是这种情况)。我可以通过一起摆脱它们来避免这种情况。但我不想这样做,因为很难看到线条。
代码如下:
line, = ax.plot([], [], color = 'blue', lw=1)
line2, = ax.plot([], [], color = 'red', lw=1)
line3, = ax.plot([], [], color = 'purple', lw=1)
def animate(i):
line.set_data(x1[:i], y1[:i])
line2.set_data(x2[:i], y2[:i])
line3.set_data(x3[:i], y3[:i])
point1, = ax.plot(x1[i], y1[i], marker='.', color='blue')
point2, = ax.plot(x2[i], y2[i], marker='.', color='red')
point3, = ax.plot(x3[i], y3[i], marker='.', color='purple')
return line, line2, line3, point1, point2, point3,
ani = animation.FuncAnimation(fig, animate, interval=20, blit=True, repeat=False, frames=1000, save_count=1000)
ani.save("TLI.gif", writer='imagemagick',fps=60)
数组x1, y1, x2, y2, x3, y3 都是包含 x、y 坐标的一维数组。
那么为什么会这样呢?为什么 .gif 文件在我直接运行时不显示绘图显示的内容?还有,我该如何解决这个问题?
我也知道这个 Stack Overflow 问题:matplotlib animation save is not obeying blit=True but it seems to work just fine in plt.show(),这意味着问题肯定是由于 blitting。但是,阅读该问题的答案并没有解决我的问题,因为它仅指ax.text,而不是通过ax.plot 绘制的常规点。
【问题讨论】:
-
输出图的DPI和题中的gif图一样吗?是否可以提供绘图所需的数据?
-
您能否提供
x1, y1, x2, y2, x3, y3以使其可重现? -
@R.Marolahy x1、y1 等分别只是 x 和 y 坐标的列表。我想你可以把它变成一条线,也会出现同样的问题。
标签: python matplotlib animated-gif matplotlib-animation