PlotAnimation函数中的Python return语句

时间:2014-12-09 20:09:10

标签: python list animation matplotlib return

我在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语句?

2 个答案:

答案 0 :(得分:0)

我能想到的第一件事是使用for循环

   return lines[0:len(lines)]

答案 1 :(得分:0)

我不知道,如果我做对了,因为我自己不使用matplotlib,但是从documentation我得到了一个主意。

  1. 为什么return lines不起作用?它应该等于

    return lines[0], lines[1], ..., lines[len(lines)-1]
    
  2. 也许迭代器在这里有帮助。关键字为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)
    
  3. 虽然我不认为,这是正确/理想的方式,但我现在想不出另一种解决方案。

    你真的需要回复一些东西吗?文档没有提到所需的返回值。