【问题标题】:How to remove a residual plot in Jupyter output after displaying a matplotlib animation?显示 matplotlib 动画后如何删除 Jupyter 输出中的残差图?
【发布时间】:2018-10-21 16:23:06
【问题描述】:

我想使用 Matplotlib 在 Jupyter 中显示动画。以下是一些基本示例:

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

fig, ax = plt.subplots()
line, = ax.plot(np.random.rand(10))
ax.set_ylim(0, 1)


def update(data):
    line.set_ydata(data)
    return line,


def data_gen():
    while True:
        yield np.random.rand(10)

ani = animation.FuncAnimation(fig, update, data_gen, interval=100);

from IPython.display import HTML
HTML(ani.to_jshtml())

当我第一次运行代码时(或重启内核后)我得到了我想要的:

但是,当我第二次运行相同的代码时,我在左下角得到一个剩余的:

我注意到当我在顶部添加%matplotlib inline 时,即使在重新启动内核后我也得到了错误的输出。因此我的猜测是,每次创建动画时,我都必须在顶部将魔术命令 %matplotlib 设置为默认值,但我什至找不到 %matplotlib 是否有默认值。


我使用 Anaconda。这是我的版本: 康达版本:4.4.10 Python版本:Python 3.6.4 :: Anaconda, Inc. IPython 版本:6.2.1 Jupyter 版本:5.4.0

【问题讨论】:

  • 我运行了你的代码,没有得到“剩余的”。
  • @10SecTom 第二次运行还可以吗?
  • 当我打开一个新笔记本并且从未包含 %matplotlib inline 或 %matplotlib 时,我没有看到问题。当我添加 %matplotlib inline 时,我看到它发生了,即使取出 i%matplotlib inline 问题仍然存在。如果您打开一个新笔记本并运行代码,但从不添加 %matplotlib inline,您会遇到问题吗?
  • @10SecTom 不,但是当我第二次运行相同的代码或在新单元格中绘制第二个动画时,我得到了同样的错误。

标签: python animation matplotlib ipython jupyter-notebook


【解决方案1】:

我使用 plt.close() 来停止第一个(不需要的)情节,并且没有看到在单独的单元格中运行动画的问题。我相信这个问题类似于 cmets 中链接的问题,jupyter 会自动为前两行显示不需要的图 - fig, ax = plt.subplots() line, = ax.plot(np.random.rand(10))。我厌倦了诸如在行尾使用分号和一些不同的魔术尝试等建议,但没有乐趣。一个更具体的解决方案无疑会出现,但现在......

【讨论】:

  • 完美! plt.close() 修复了这个错误。我之前尝试使用 plt.isoff() ,但它返回了一个错误。非常感谢。 PS。我也在尝试分号。
  • :) 和我一样做,尝试失败,再试一次......我对 matplotlib 模块的了解并不多,很高兴知道确切的问题,但很高兴它得到了你又来了。
  • 我认为 jupyter 过于激进地试图在看到一个情节时输出一个情节。您可以通过%%capture 捕获单元格的完整输出(作为plt.close() 的替代品)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多