今天就先把光學的部分暫緩,再來聊聊Matplotlib的功能吧!
說實在當初光是用python畫圖就讓本寶寶好震驚,如今知道他還能做動畫,真是太神奇了!
這裡就請chatGPT幫我們簡單介紹一下吧:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 設定繪圖區域
fig, ax = plt.subplots()
x = np.linspace(0, 2 * np.pi, 100) #函數生成數值範圍,100為分割數量
line, = ax.plot(x, np.sin(x)) #繪製函數曲線
# 定義frame更新函數update
def update(frame):
line.set_ydata(np.sin(x + frame / 10)) # 更新y數據
return line,
# 創建動畫
ani = animation.FuncAnimation(fig, update, frames=100, interval=50, blit=True)
# interval=50代表每一幀之間的間隔時間為 50 毫秒。
# blit=True是一種優化技術,用來減少重新繪製整個圖形的開銷,只重新繪製那些發生變化的部分。這可以使動畫更加高效。
# 將動畫保存為GIF
ani.save('sine_wave.gif', writer='pillow')
plt.show()
在這段程式碼中,我們首先設定繪圖區域並畫出初始的正弦波形。在 update 函數中,正弦波的相位隨著 frame的變化而更新,產生動態效果。接著,我們使用 FuncAnimation 創建動畫,並使用 ani.save 將動畫導出為 GIF 格式。這裡使用 pillow 作為 GIF 的生成工具,該庫需提前安裝 (pip install pillow)。
update 函數的作用是在每幀動畫中更新正弦波的 y 軸數據,從而使正弦波在動畫過程中看起來像是在動態移動。每次傳入一個遞增的 frame 值,使正弦波在動畫中持續向右平移,創造出波形不斷流動的視覺效果。
跑出來的動畫(GIF)如下:
ChatGPT教會了我們愛,不對是動畫。
明天我們將開始把之前做的光學現象用動畫展示唷!