Я пытаюсь отобразить базовую анимацию, используя Python и Matplotlib, через animation.FuncAnimation()
. Анимация не повторяется и состоит из фиксированного (и предварительно определенного) количества кадров с некоторым фиксированным интервалом между ними. Он предназначен для запуска один раз.
Вот как должен выглядеть один случайный кадр:

Анимация работает нормально, но фигура не закрывается автоматически после вызова plt.show()
, поскольку это блокирующий вызов.
Я знаю, что метод plt.show()
можно превратить в неблокирующий вызов, написав plt.show(block=False)
, но это не полностью решает мою проблему. У меня не было возможности получить какую-либо информацию здесь, на StackOverflow и других сайтах, относительно того, как библиотека располагает этой информацией об этом событии или около того, чтобы позволить мне позвонить plt.close()
.
Я ищу питонский способ сделать это вместо моего текущего решения, которое далеко не хорошо. Вот мое «решение»:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# Animation settings
def animate(frame):
grid_size = [10, 10]
print('frame: {}'.format(frame)) # Debug: May be useful to stop
grid = np.random.randint(low=0, high=256, size=grid_size, dtype=np.uint8)
ax.clear()
ax.imshow(grid, cmap='gray', vmin=0, vmax=255) # Is the range [0, 255] or [0, 255)?
INTERVAL = 100
FRAMES_NUM = 10
anim = animation.FuncAnimation(fig, animate, interval=INTERVAL, frames=FRAMES_NUM, repeat=False)
plt.show(block=False)
plt.pause(float(FRAMES_NUM*INTERVAL)/1000) # Not pythonic
plt.close(fig)
- Может кто-нибудь показать мне питонский способ сделать это?
- Я все это делаю
неправильно?