Matplotlib Python 在线开启/关闭

73
如果我在IPython Notebook中使用Matplotlib内联启动,是否有办法随后以“标准”的非内联方式绘制图形,而无需重新加载没有内联命令的笔记本?
我希望能够在笔记本中内联一些图形,但其他图形以传统的交互模式显示,以便我可以进行缩放和平移。
4个回答

57
您可以通过使用%matplotlib <backend>来切换matplotlib的后端。要切换回系统的默认后端,请使用%matplotlib auto或简单地使用%matplotlib

有许多可用的后端,例如gtkqtnotebook等。我个人强烈建议使用notebook(又名nbagg)后端。它类似于inline但是交互式的,允许在Jupyter内部进行缩放/平移。

有关更多信息,请在IPython/Jupyter中尝试: ?%matplotlib 或查看IPython的在线文档


3
在输入“%matplotlib”命令时,我的内核会崩溃,我必须重新启动笔记本才能继续。有没有一种方法可以在不导致内核崩溃的情况下完成此操作? - mgig
我无法复现这个问题,所以我不确定是什么原因导致了你遇到的问题。我使用的是numpy 1.11.0、matplotlib 1.5.1和IPython 5.0.0进行测试。我遇到了一些与matplotlib无关的内核崩溃问题,在将numpy降级到1.11.0后,问题得到解决。 - Gustavo Bezerra
对我来说,只有使用auto才有效,简单的%matplotlib会抛出异常。 - Artyom Akselrod

17
在我的Jupyter笔记本中,使用后端为“notebook”(假设通常的“import matplotlib.pyplot as plt”),plt.ioff()plt.ion()能够完美地工作。

21
尽管我调用了 ion()ioff(),但我的图表始终以内联方式显示。 - Konstantin
ion和ioff设置交互模式,决定绘图命令后是否更新图形(打开交互模式)或等待plt.show()(如果关闭交互模式)。 这与inline无关,它决定笔记本电脑或控制台应显示图形(每次更新图形时都会发生,这意味着如果使用ion设置交互模式,则在每个绘图命令之后,如果使用ioff取消设置,则在plt.plot之后)。 - Vincenzooo

11

这取决于您的matplotlib确切配置,但您可以在'osx'、'qt4'、'qt5'、'gtk3'、'wx'、'qt'、'gtk'、'tk'之一的内联和其中切换(某些是其他的别名)。只需使用%matplotlib <您想要的>来切换。根据条件,您可能只能访问其中之一。


如果我在笔记本的中途切换到/从qt切换,我经常会得到无法加载并导致内核崩溃的绘图(通常是qt绘图)。这是在3.1.1版本上发生的。 - Marses

9
另一种可能性是使用 matplotlib.pyplot.close(fig)。即使 %matplotlib auto 引发了可怕的 wx 错误(与我安装在LD_LIBRARY_PATH中的GTK开发文件版本有关),这对我来说仍然有效。
尽管这可能会在制作视频之类的任务时造成问题(也可能不会;我没有尝试过),但当我在使用 IPython.display.HTML 组合图像以在表格中添加文本时,它对我很有效,如此答案所述。

在我创建动画时,这并没有给我带来任何问题。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接