Я создал серию трехмерных изображений, используя plt.plot_surface()
с plt.scatter()
, как показано ниже:
И я хотел бы сохранить их как. GIF. Следуя этому примеру я смог l oop по углам обзора и собрать изображения:
v_angles = [item for item in range(184,264,2)] + [item for item in range(264,183,-2)]
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.animation import PillowWriter
ims = []
for angle in v_angles:
fig = plt.figure(figsize = (13,8))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z,
cmap=plt.cm.coolwarm,
alpha=0.67,
edgecolor='white',
linewidth=0.25,
zorder=-1)
im = plt.gcf()
ims.append([im])
, сохранив их как matplotlib.animation.ArtistAnimation()
объект:
ani = animation.ArtistAnimation(fig,
ims,
interval=50,
blit=True,
repeat_delay=500)
Похоже, что изображения (ims
) действительно были собраны и ani
сохранены правильно:
In[574]: ims
Out[575]:
[[<Figure size 936x576 with 1 Axes>],
[<Figure size 936x576 with 1 Axes>],
[<Figure size 936x576 with 1 Axes>],
...
In[576]: ani
Out[577]: <matplotlib.animation.ArtistAnimation at 0x107571fa90>
И все же, когда я пытаюсь создать .gif
writer = PillowWriter(fps=20)
ani.save("3d_scatter.gif", writer='imagemagick')
I получить следующее IndexError
:
File ".../anaconda3/lib/python3.7/site-packages/matplotlib/animation.py", line 575, in finish
self._frames[0].save(
IndexError: list index out of range
Похоже, self._frames
должен содержать элементы, но не содержит.
Кто-нибудь знает, как это исправить? Спасибо.