Документацията е малко по-лека за обяснението как да използватеFuncAnimation. Въпреки това има примери в галерията и уроци за блогове, като на Джейк Вандерплас и PDF на Сам Долан .
Този пример от урока на Джейк Вандерплас е може би "Hello World" на анимацията на matplotlib:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def init():
return [line]
def animate(i, ax, line):
x = np.linspace(0, 2*np.pi, N) + i/(N*2)
ax.set_xlim(x.min(), x.max())
line.set_data(x, np.sin(x))
return [line]
N = 100
fig, ax = plt.subplots()
line, = ax.plot([], [])
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
ani = animation.FuncAnimation(
fig, animate, init_func=init, interval=0, frames=int(4*np.pi*N),
repeat=True, blit=True, fargs=[ax, line])
plt.show()
Променете различни стойности или редове код и вижте какво се случва. Вижте какво се случва, ако промените return [line]
към нещо друго. Ако изучавате и играете с тези примери, можете да научите как парчетата пасват заедно.
След като разберете този пример, трябва да можете да го модифицирате, за да отговаря на целта си.
Ако имате проблеми, публикувайте кода си и опишете какво съобщение за грешка или неправилно поведение виждате.
Някои съвети:
-
Тъй като анимацията изисква извикване на
line.set_data
, не мисля, че можете да използватеdf.plot()
на Pandas . Всъщност не съм сигурен дали Pandas DataFrame е полезен тук. Може да е по-добре да изсмучете данните в списъци или масиви NumPy и да ги предадете наline.set
както по-горе, без да се намесват Pandas. -
Отварянето на връзка с базата данни трябва да се извърши веднъж.
animate
се обажда много пъти. Така че е по-добре да дефиниратеconn
иc
иquery
-- всичко, което не се променя с всяко извикване наanimate
--извънanimate
, и ги предайте обратно като аргументи наanimate
чрезfargs
параметър.