MatPlotLib FuncAnimation不适用于非零间隔或blit = True

时间:2016-01-25 00:37:25

标签: python animation matplotlib

我非常感谢整个社区,感谢你,我已经了解了我所知道的大部分内容!

无论如何,我在使用MatPlotLib的动画模块时遇到了问题。

我已将代码缩减到似乎是什么问题。以下代码有效:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

ionFig = plt.figure(figsize=(18.0, 12.5))
ionPlot = ionFig.add_subplot(111)
ionScatter = []
plots = {}
plots['pos'] = [ [[0,2,4, 0,2,4],[1,1,1, 1,1,1]] , [[5,6,8, 5,6,8],[1,4,3, 1,4,3]] ]
ionPlot.set_xlim(0,10)
ionPlot.set_ylim(0,10)

for particle in range(len(plots['pos'])):
    ionScatter.append(ionPlot.scatter(plots['pos'][particle][0][0], plots['pos'][particle][1][0], s=6))

for scatter in ionScatter:
    scatter.remove()

def animate(i, ionScatter, plots):
    print i
    for particle in range(len(plots['pos'])):
        ionScatter[particle].set_offsets([plots['pos'][particle][0][i], plots['pos'][particle][1][i]])
    return ionScatter


ani = animation.FuncAnimation(ionFig, animate, fargs=[ionScatter, plots], frames=len(plots['pos'][0][0]), interval=0, blit=True, repeat=True)
ionFig.show()

但是我想将间隔设置为非零数字,以减慢动画速度。 但是,当我将第二行最后一行更改为:

ani = animation.FuncAnimation(ionFig, animate, fargs=[ionScatter, plots], frames=len(plots['pos'][0][0]), interval=100, blit=True, repeat=True)

图中显示了一瞬间,然后关闭。

将其设置为

ani = animation.FuncAnimation(ionFig, animate, fargs=[ionScatter, plots], frames=len(plots['pos'][0][0]), interval=100, blit=True, repeat=True)

导致相同的错误,

ani = animation.FuncAnimation(ionFig, animate, fargs=[ionScatter, plots], frames=len(plots['pos'][0][0]), interval=0, blit=False, repeat=True)

导致出现空白窗口而不会消失。

在所有这些情况下,我已经将回调打印出迭代编号i。在前两种情况下,它会两次,但都是0。 在最后一种情况下,它确实循环,但正如我所说,窗口是空的。无论如何,这种情况不太有趣,因为间隔回到了0。

因此,出于某种原因,拥有非零间隔会让我的动画变得混乱,任何想法都可能是什么?我已经环顾四周,但似乎找不到多少。

不要想象它会带来很大的不同,但我在Ubuntu 14上。

非常感谢!

1 个答案:

答案 0 :(得分:0)

所以我找到了一个解决方案,虽然我不知道它为什么会起作用。

似乎使用plt.show()而不是ionFig.show()允许使用间隔。我假设使用ionFig.show()是不够的,因为它不会告诉动画自己启动,所以如果这是你想做的话可能需要另一行?不确定,如果有人知道,请告诉我。