我在matplotlib FuncAnimation中使用的函数中存在问题。
我知道这与PlotAnimation代码没有100%的关系。它与return
的工作原理更相关。无论如何,在这里:
我需要在同一个图表中绘制几行 - 但我事先并不知道有多少行。所以,我创建了一个图表列表(称为lines
),如下所示:
fig = plt.figure()
ax = plt.axes(xlim=(0, 1), ylim=(0, 1), aspect='equal')
lines=[]
for i in range(len(disc)):
line, = ax.plot([], [], '-', lw=1.5)
lines.append(line)
假设len(disc)
等于或大于3.如果我这样做:
def animate(i):
global disc
for i in range(len(disc)):
lines[i].set_data(disc[i].x, disc[i].y)
return line[0], line[1], line[2]
anim = animation.FuncAnimation(fig, animate, blit=True)
plt.show()
所有作品都是完美的(除非事实是,如果len(disc)
比3更重要,我会错过情节中的一些线条。)
但是,我事先并不知道len(disc)
。所以,我的问题是:有没有办法使用类似的东西:
return lines
(或类似的东西;我知道上面的内容不起作用),替换上面animate
函数中的return语句?
答案 0 :(得分:0)
我能想到的第一件事是使用for循环
return lines[0:len(lines)]
答案 1 :(得分:0)
我不知道,如果我做对了,因为我自己不使用matplotlib
,但是从documentation我得到了一个主意。
为什么return lines
不起作用?它应该等于
return lines[0], lines[1], ..., lines[len(lines)-1]
也许迭代器在这里有帮助。关键字为yield
:
def def animate(i):
global disc
for i in range(len(disc)):
lines[i].set_data(disc[i].x, disc[i].y)
yield from lines # in Python 2.x use: yield iter(lines)
虽然我不认为,这是正确/理想的方式,但我现在想不出另一种解决方案。
你真的需要回复一些东西吗?文档没有提到所需的返回值。