我用matplotlib的动画绘制了n条曲线,多亏了前面的问题和答案,这条曲线运行得很好,现在我想在绘图中添加一些不断更新的文本,基本上是帧数,但我不知道如何将该对象与我的animate函数需要返回的艺术家的可迭代对象结合起来。
下面是我的代码:
import matplotlib.animation as anim
import matplotlib.pyplot as plt
import numpy as np
tracks = {}
xdata = {}
ydata = {}
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*.5,20+ii*.5,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)]
plt_text = ax1.text(25, 25, '')
def animate(i):
# x and y values to be plotted
for jj in range(n_tracks):
xdata[str(jj)].append( tracks[str(jj)][1,i] )
ydata[str(jj)].append( tracks[str(jj)][0,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] )
plt_text.set_text('{0}'.format(i))
return plt_tracks + plt_lastPos
anim = anim.FuncAnimation( fig, animate, frames=n_waypts, interval=20, blit=True, repeat=False )
plt.show()
简单地将return语句更改为return (plt_tracks + plt_lastPos), plt_text
或return (plt_tracks + plt_lastPos), plt_text,
之类的语句是不起作用的,那么如何正确地组合这些艺术家呢?
1条答案
按热度按时间7gcisfzg1#
animate
函数必须返回 * articts * 的可迭代对象(例如,其中articts是作为plot-call的结果而绘制的对象)。plt_tracks
和plt_lastPost
都是这样的可迭代对象。但是,plt_text
是单个articts。因此,使代码正常工作的一个可能的解决方案是将return
语句更改为或者,也可以这样写