我非常感谢整个社区,感谢你,我已经了解了我所知道的大部分内容!
无论如何,我在使用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上。
非常感谢!
答案 0 :(得分:0)
所以我找到了一个解决方案,虽然我不知道它为什么会起作用。
似乎使用plt.show()而不是ionFig.show()允许使用间隔。我假设使用ionFig.show()是不够的,因为它不会告诉动画自己启动,所以如果这是你想做的话可能需要另一行?不确定,如果有人知道,请告诉我。