Python實現動態(tài)繪圖的示例詳解
示例
matplotlib中的animation提供了動態(tài)繪圖功能,下面列舉一個最簡單的動態(tài)繪制三角函數的例子,來初步演示一下。
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為繪圖窗口和坐標軸,這是在任何繪圖操作中都涉及到的元素,但在本例中的動態(tài)繪圖操作中,ax是以一種"全局變量"的形式存在的,將在后米娜的init和animate函數中被直接調用。
line即為繪制在ax之上的曲線,由于ax.plot默認返回一個曲線列表,通過line,=這樣的方法,可以提取出曲線列表中的第0條曲線,其結果等價于
line = ax.plot([], [], lw=1)[0]
接下來init函數用于繪圖曲線的初始化,animate用于調整繪圖函數的動態(tài)變化,其輸入N暫時可以簡單地理解為第N張圖像的曲線。
接下來,就是動態(tài)繪圖的核心對象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實現動態(tài)繪圖的示例詳解的文章就介紹到這了,更多相關Python動態(tài)繪圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python cookbook(數據結構與算法)讓字典保持有序的方法
這篇文章主要介紹了Python讓字典保持有序的方法,涉及Python基于collections模塊中的OrderedDict類實現控制字典順序的相關操作技巧,需要的朋友可以參考下2018-02-02
Django+uni-app實現數據通信中的請求跨域的示例代碼
這篇文章主要介紹了Django+uni-app實現數據通信中的請求跨域的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10

