当前位置: 首页 > 面试题库 >

为什么Matplotlib动画只能在交互式会话中起作用?

令狐珂
2023-03-14
问题内容

如果我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。

这是一个已知的错误?任何有想法为什么会发生这种情况或如何解决的人?


问题答案:

在动画文档中:“ [..]保持对实例对象的引用至关重要。”

因此,您需要通过将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()

有一个正在进行的讨论关于是否Animation应该在内部或不保存。



 类似资料:
  • 问题内容: 我正在尝试使形状的动画随着样本大小的增加(从100增加到1000)而呈指数分布。还有一个滑块,用于配置发行版的lambda参数,以及一个用于启动动画的按钮。 我的问题是,即使布局得到渲染,当我按下开始按钮时也没有动画发生。到目前为止,这是我的尝试: 为了简化起见,我在Python笔记本中运行它: 问题答案: 您应该注意函数的名称空间。 考虑 因此,您需要处理实际对象,而不是它们的某些本

  • 响应式交互能让用户信任,并且吸引他们。 当用户操作一个美观且符合常理的应用时,他们会感到满意甚至很高兴。那是一种经过深思熟虑、有目的、非随机的而且可以带有轻微异想天开但不会让人分心的交互。 在 material design 中,应用是响应式的并且渴望用户操作的: 触摸,语音,键盘及鼠标作为首要考虑的输入方式。 虽然 UI 元素是有形的,但是他们被限制在屏幕里面(电脑或者移动设备的屏幕),视觉元素

  • 我有一个docker-compose文件: 但我想知道为什么不和Docker一起工作--组成。

  • 问题内容: 如何 使用文件输入 模拟python交互式会话并保存抄本?换句话说,如果我有一个文件: 我想得到看起来像这样(省略python横幅): 我尝试将stdin喂入python,twitter的建议是“ bash脚本”,没有详细信息(在bash中使用script命令播放,没有乐趣)。我觉得应该很容易,但我缺少一些简单的东西。我需要使用或编写解析器吗? Python或ipython解决方案就可

  • 问题内容: 就我而言,每次只想拖一个点。但是,由于两个点严重重叠,因此拖动一个点将导致另一个点被拖动。我如何只拖动上面的点?谢谢! 问题答案: Joe的方法工作正常,但是它使一组可拖动点作为一个类,而不是单个可拖动点类。我只是遇到了一种使用动画blit技术解决上述问题的替代方法。它不仅使拖动更快,更流畅,而且只能拖动一个点。请参阅以下代码。

  • 原文:Using matplotlib in a python shell 警告 该页面的内容已严重过时。 默认情况下,matplotlib 将绘图延迟到脚本结束,因为绘图可能是开销大的操作,并且你可能不想在每次更改单个属性时更新绘图,而是只在所有属性更改后更新一次。 但是在 python shell 中工作时,通常需要用每个命令更新绘图,例如,在更改xlabel()或一行的标记样式之后。 虽然这

  • 问题内容: 我发现自己经常使用Python的解释器来处理数据库,文件等- 基本上是半结构化数据的许多手动格式化。我没有按照我的意愿正确地保存和清理有用的位。有没有一种方法可以将我的输入保存到外壳中(数据库连接,变量分配,很少用于循环和逻辑位)-交互式会话的一些历史记录?如果我使用类似的东西,则会收到过多的标准输出噪音。我真的不需要腌制所有对象- 尽管如果有解决方案,那就可以了。理想情况下,我只剩下

  • 我正在使用以下Python代码制作动画,并希望通过FFmpeg(在PyCharm中)将其保存为视频: 但是,当达到时,进程停止,但是当达到时,进程应该停止。下图显示了进程停止的时间。PyCharm运行控制台 然后我检查并发现当达到1.0时视频结束。 也就是说,只有前100帧动画被转换为文件,所以我很困惑其余的帧都去哪里了? 我试图通过windows cmd运行代码,但得到了相同的结果。 然后取消对