Hoạt ảnh với FuncAnimation
Làm biểu đồ chuyển động từng khung hình bằng FuncAnimation và lưu thành ảnh GIF.
Giới thiệu
Hoạt ảnh là một biểu đồ được vẽ lại nhiều lần. FuncAnimation gọi hàm update của bạn một lần cho mỗi khung hình (frame); hàm này thay đổi dữ liệu của đường có sẵn thay vì vẽ biểu đồ mới, nhờ vậy chạy nhanh.
ax.plot trả về một danh sách các đường, và line, = lấy đường duy nhất trong đó. update(frame) nhận lần lượt 0, 1, 2... và mỗi lần dịch sóng đi một chút bằng set_ydata. frames là số khung hình, interval là thời gian giữa hai khung hình tính bằng mili giây. animation.save ghi ra file GIF bằng PillowWriter; trong trình soạn thảo online, file GIF xuất hiện trong workspace và plt.show() hiển thị khung hình cuối cùng.
Trình mô phỏng tương tác
Bấm Play, kéo thanh frame, đổi số khung hình và khoảng thời gian giữa chúng. Dòng được tô sáng chạy một lần cho mỗi khung hình.
Ví dụ Matplotlib chạy được
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation, PillowWriter
x = np.linspace(0, 2 * np.pi, 200)
fig, ax = plt.subplots(figsize=(7, 4))
line, = ax.plot(x, np.sin(x))
ax.set_ylim(-1.2, 1.2)
ax.set_title("A moving wave")
def update(frame):
line.set_ydata(np.sin(x + frame / 10))
return line,
animation = FuncAnimation(fig, update, frames=60, interval=50)
animation.save("wave.gif", writer=PillowWriter(fps=20))
print("Saved wave.gif")
plt.show()
