我有 n 條曲線,我想使用 matplotlib 繪制animation(每條曲線對應一個用健身追蹤器或智能手機記錄的 gpx 檔案)。它在僅使用一個軌道或兩個軌道時效果很好。但是一旦我想讓它適應使用 n 條曲線,我就迷路了。這是我的代碼:
import matplotlib.animation as anim
import matplotlib.pyplot as plt
import numpy as np
tracks = {}
xdata = {}
ydata = {}
# in my case n_tracks would rather correspond to a couple of 100
n_tracks = 2
n_waypts = 100
for ii in range(n_tracks):
# generate fake data
lat_pts = np.linspace(10 ii*1,20 ii*1,n_waypts)
lon_pts = np.linspace(10 ii*1,20 ii*1,n_waypts)
tracks[str(ii)] = np.array( [lat_pts, lon_pts] )
xdata[str(ii)] = []
ydata[str(ii)] = []
fig = plt.figure()
ax1 = fig.add_subplot( 1,1,1, aspect='equal', xlim=(0,30), ylim=(0,30) )
plt_tracks = [ax1.plot([], [], marker=',', linewidth=1)[0] for _ in range(n_tracks)]
plt_lastPos = [ax1.plot([], [], marker='o', linestyle='none')[0] for _ in range(n_tracks)]
def animate(i):
# x and y values to be plotted
for jj in range(n_tracks):
xdata[str(jj)].append( tracks[str(jj)][0,i] )
ydata[str(jj)].append( tracks[str(jj)][1,i] )
# update x and y data
for jj in range(n_tracks):
plt_tracks[jj].set_data( xdata[str(jj)][:], ydata[str(jj)][:] )
plt_lastPos[jj].set_data( xdata[str(jj)][-1], ydata[str(jj)][-1] )
return plt_tracks, plt_lastPos
anim = anim.FuncAnimation( fig, animate, frames=n_waypts, interval=20, blit=True )
plt.show()
字典tracks包含曲目,其中對于每個曲目,我們都有一個包含經度的陣列和一個包含緯度資料的陣列。字典xdata并ydata用于繪圖目的。
我有兩個包含繪圖物件的串列,plt_tracks和plt_lastPos,其中第一個用于連續繪制軌跡,后者用于指示最新位置。
錯誤資訊是RuntimeError: The animation function must return a sequence of Artist objects.So, my mistake seems to be the return statement,但簡單地,在末尾添加一個在這里沒有幫助。任何關于我遺漏的提示都將不勝感激。
uj5u.com熱心網友回復:
您應該回傳一個可迭代的“藝術家”(即要繪制的東西,例如“情節”呼叫的結果。
plt_tracks是這樣一個可迭代的。
plt_lastPos也是。
但是(plt_tracks, plt_lastPos)(這里有隱式括號)是一對這樣的可迭代物件。所以可迭代的藝術家
所以,只需將它們全部放在一個串列中。代替
return plt_tracks, plt_lastPos
經過
return plt_tracks plt_lastPos
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/535495.html
標籤:Pythonmatplotlib动画图形matplotlib-动画
