Dokumentacja jest nieco lekka w wyjaśnieniu, jak używać funkcji FunAnimation. Istnieją jednak przykłady w galerii i blogtutoriale, takie jak Jake Vanderplas oraz PDF Sama Dolana .
Ten przykład z samouczka Jake'a Vanderplasa to prawdopodobnie animacja "Hello World" ofmatplotlib:
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()
Zmień różne wartości lub wiersze kodu i zobacz, co się stanie. Zobacz, co się stanie, jeśli zmienisz return [line]
do czegoś innego. Jeśli będziesz studiować i bawić się tymi przykładami, możesz dowiedzieć się, jak poszczególne elementy do siebie pasują.
Kiedy zrozumiesz ten przykład, powinieneś być w stanie go zmodyfikować, aby pasował do twojego celu.
Jeśli masz problemy, opublikuj swój kod i opisz, jaki komunikat o błędzie lub niewłaściwe zachowanie widzisz.
Kilka wskazówek:
-
Ponieważ animacja wymaga wywołania
line.set_data
, nie sądzę, że możesz użyćdf.plot()
Pandy . W rzeczywistości nie jestem pewien, czy Pandas DataFrame jest tutaj przydatna. Lepiej byłoby wessać dane do list lub tablic NumPy i przekazać je doline.set
jak powyżej, bez angażowania Pand. -
Otwarcie połączenia z bazą danych powinno być wykonane jednorazowo.
animate
jest wielokrotnie wywoływany. Więc lepiej jest zdefiniowaćconn
ic
iquery
-- wszystko, co nie zmienia się przy każdym wywołaniuanimate
--pozaanimate
i przekaż je z powrotem jako argumenty doanimate
przezfargs
parametr.