как я могу сохранить последний кадр, когда я использую функцию анимации matplotlib с blit = True

Я должен установить blit = true, так как график намного быстрее. Но после анимации (повтор = ложь), если я использую масштабирование фигуры, фигура просто исчезнет. Мне нужно сохранить последний кадр, чтобы я мог увеличить последнюю фигуру.

Спасибо!


person Cheng Shanbao    schedule 14.10.2018    source источник
comment
В настоящее время я не уверен в причине, но я подал проблему для этого не быть забытым.   -  person ImportanceOfBeingErnest    schedule 15.10.2018
comment
Спасибо! Я думаю о некоторых хитростях, чтобы обойти эту проблему, например, снова построить только последний кадр после завершения анимации.   -  person Cheng Shanbao    schedule 15.10.2018
comment
Я столкнулся с той же проблемой, и в качестве обходного пути я изменил генератор кадров, который передается в FuncAnimation, чтобы он бесконечно выдавал последний элемент.   -  person oh54    schedule 02.08.2019


Ответы (1)


Один из способов обхода — инициализировать анимацию с использованием последнего кадра. Очевидным недостатком является то, что вам нужно предварительно вычислить последний кадр. Адаптация этот пример будет

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))

cnt = 50 # Define so we know what the last frame will be.

def init():
    # Note the function is the same as `animate` with `i` set to the last value
    line.set_ydata(np.sin(x + cnt / 100))
    return line,

def animate(i):
    line.set_ydata(np.sin(x + i / 100))  # update the data.
    return line,

ani = animation.FuncAnimation(
    fig, animate, init_func=init, interval=2, blit=True, save_count=cnt)

ani.save("mwe.mov")
fig.savefig("mwe.png")
person Keith Prussing    schedule 07.03.2019