【问题标题】:Python return statement in PlotAnimation functionPlotAnimation 函数中的 Python 返回语句
【发布时间】:2014-12-09 20:09:09
【问题描述】:

我在 matplotlib FuncAnimation 中使用的函数有问题。

我知道这不是 100% 与 PlotAnimation 代码相关的。它与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语句?

【问题讨论】:

    标签: python list animation matplotlib return


    【解决方案1】:

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

       return lines[0:len(lines)]
    

    【讨论】:

    • 应该只返回lines[0]
    • 当然,多么愚蠢。 return lines[0:len(lines)] 怎么样
    • 谢谢,返回 lines[0:len(lines)] 效果很好!
    • @LuizEleno 怎么样? return lines[0:len(lines] 返回一个包含所有元素的新列表。所以它应该和return lines 一样(除了它产生一个新实例的部分)。顺便提一句。 return lines[:] 应该完全一样。
    • @DaveJ 好吧,我不知道是怎么回事,它只是工作... .
    【解决方案2】:

    我不知道我是否正确,因为我自己不使用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)
      

    虽然我不认为这是正确/理想的方法,但我现在想不出另一种解决方案。

    您真的需要退货吗?文档没有提到必需的返回值。

    【讨论】:

    • 感谢您的回答。不幸的是,它没有用。但@Amrish Lakhisaran 的答案正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2011-06-06
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多