Сохраните .gif IndexError, используя метод .save () с matplotlib.animation.ArtistAnimation () - PullRequest
1 голос
/ 07 февраля 2020

Я создал серию трехмерных изображений, используя plt.plot_surface() с plt.scatter(), как показано ниже: enter image description here

И я хотел бы сохранить их как. 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 должен содержать элементы, но не содержит.

Кто-нибудь знает, как это исправить? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...