matplotlib动画的任何原因只适用于交互式会话?

时间:2017-04-08 16:25:38

标签: python macos animation matplotlib

如果我使用代码

创建文件test.py
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

if __name__ == '__main__':
    fig = plt.figure()
    title = fig.suptitle("Test _")

    def anim(i):
        title.set_text("Test %d" % i)
        plt.plot([0,1], [0,1])

    FuncAnimation(fig, anim)
    plt.show()

并尝试在我的命令行中运行它,使用python test.py,我得到一个标题为Test _且没有任何轴的空屏幕。

使用python -i test.py运行时也是如此,但如果我现在在交互式会话中输入相同的代码

>>> fig = plt.figure()
>>> title = fig.suptitle("Test _")
>>> FuncAnimation(fig, anim)
>>> plt.show()

一切都按预期工作。

我已经看了这么久了,我似乎没有找到任何与此相关的问题或问题。我在OS X上的python 3.5.2中使用matplotlib 2.0.0。

这是一个(已知)错误吗?任何有想法的人可能会发生这种情况或如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

animation documentation:" [..],保持对实例对象的引用至关重要。"

因此,您需要通过将FuncAnimation实例分配给变量来使其保持活动状态。

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

if __name__ == '__main__':
    fig = plt.figure()
    title = fig.suptitle("Test _")

    def anim(i):
        title.set_text("Test %d" % i)
        plt.plot([0,1], [0,1])

    ani = FuncAnimation(fig, anim)
    plt.show()