Python實現動態繪圖的示例詳解
示例
matplotlib
中的animation
提供瞭動態繪圖功能,下面列舉一個最簡單的動態繪制三角函數的例子,來初步演示一下。
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig, ax = plt.subplots(figsize=(5,3)) line, = ax.plot([], [], lw=1) ax.grid() def init(): ax.set_ylim(-1, 1) ax.set_xlim(0, 10) line.set_data([],[]) plt.tight_layout() return line, def animate(N): x = np.arange(N)/10 y = np.sin(x) line.set_data(x, y) return line, ani = animation.FuncAnimation(fig, animate, range(100), init_func=init, interval=40) ani.save("ani_test_0.gif") plt.show()
效果如下
其中,fig, ax
為繪圖窗口和坐標軸,這是在任何繪圖操作中都涉及到的元素,但在本例中的動態繪圖操作中,ax
是以一種"全局變量"的形式存在的,將在後米娜的init
和animate
函數中被直接調用。
line
即為繪制在ax
之上的曲線,由於ax.plot
默認返回一個曲線列表,通過line,=
這樣的方法,可以提取出曲線列表中的第0條曲線,其結果等價於
line = ax.plot([], [], lw=1)[0]
接下來init
函數用於繪圖曲線的初始化,animate
用於調整繪圖函數的動態變化,其輸入N
暫時可以簡單地理解為第N
張圖像的曲線。
接下來,就是動態繪圖的核心對象FuncAnimation
。
FuncAnimation
FuncAnimation
是一個類,其構造函數為
FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)
前面的4個參數在示例程序中已經用到,fig
為繪圖窗口;func
為圖像更新函數;frames
為繪圖幀號;init_func
為圖像的初始化函數。
其繪圖邏輯寫成偽代碼類似於
for n in frames: if n>0: draw(func(n)) else: draw(init(n))
如果frames
是一個整數,則在調用時會自動轉為range(frames)
。
而用於繪圖的主要對象,就是坐標軸ax
,故而在示例中的animate
以及init
函數的返回對象是line,
,當然也可以寫成return [line]
。
FuncAnimation
中的其他參數含義如下:
fargs
為繪圖函數func
的其他輸入參數save_count
緩存幀數interval
幀延時,默認200毫秒,幀率25fps對應40毫秒。repeat_delay
重復延時,單位是微秒repeat
為False
時,動畫將隻演示一遍。
三維情況
三維情況的動圖繪制函數,機理與二維是相同的,下面引用官方畫廊中的示例,來演示一下三維動圖的繪制流程,首先生成一組隨機行走的曲線
np.random.seed(19680801) # 隨機數種子,便於復現 def random_walk(N, L=0.05): st = np.random.random(3) steps = np.random.uniform(-L, L, size=(N, 3)) walk = st + np.cumsum(steps, axis=0) return walk walks = [random_walk(30) for index in range(40)]
random_walk
可生成一條隨機行走的三維曲線,walks
通過調用這個函數,共生成瞭40條曲線,下面就是對這40條曲線的調用
def animate(num, walks, lines): for line, walk in zip(lines, walks): line.set_data(walk[:num, :2].T) line.set_3d_properties(walk[:num, 2]) return lines fig = plt.figure(figsize=(5,4)) ax = fig.add_subplot(projection="3d") lines = [ax.plot([], [], [], lw=1)[0] for _ in walks] ax.set(xlim3d=(0, 1), xlabel='X') ax.set(ylim3d=(0, 1), ylabel='Y') ax.set(zlim3d=(0, 1), zlabel='Z') ani = animation.FuncAnimation( fig, animate, 30, fargs=(walks, lines), interval=100) plt.show()
效果如下
到此這篇關於Python實現動態繪圖的示例詳解的文章就介紹到這瞭,更多相關Python動態繪圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python中的圖形繪制簡單動畫實操
- 如何利用Matplotlib庫繪制動畫及保存GIF圖片
- Python編程使用matplotlib繪制動態圓錐曲線示例
- Python Matplotlib繪制動圖平滑曲線
- Matplotlib animation模塊實現動態圖