ChatGPT解决这个技术问题 Extra ChatGPT

“%matplotlib inline”的目的

%matplotlib inline 到底有什么用?

这是一个神奇的功能,可以在笔记本中呈现图形(而不是显示图形对象的转储)。此处有一个简单的 Matplotlib 教程 data-blogger.com/2017/11/15/…
You can check the available backends(如 inline)通过输入:%matplotlib --list
我最近看到一个关于这个的好推特帖子:twitter.com/tedpetrou/status/1238812794218307590?lang=en
相关:matplotlib python inline on/off 以及如何更改后端

C
Community

%matplotlib 是 IPython 中的 magic function。为方便起见,我将在此处引用相关文档供您阅读:

IPython 有一组预定义的“魔术函数”,您可以使用命令行样式语法调用它们。有两种魔法,面向线的和面向细胞的。行魔法以 % 字符为前缀,其工作方式与操作系统命令行调用非常相似:它们将行的其余部分作为参数获取,其中传递的参数不带括号或引号。 Lines 魔法可以返回结果,并且可以在作业的右侧使用。单元格魔法以双 %% 为前缀,它们是函数,不仅可以作为参数获取该行的其余部分,还可以将其下方的行作为单独的参数获取。

%matplotlib inline sets the backend of matplotlib to the 'inline' backend

使用这个后端,绘图命令的输出会在 Jupyter 笔记本等前端内联显示,直接在生成它的代码单元下方。然后,生成的图也将存储在笔记本文档中。

使用“内联”后端时,您的 matplotlib 图形将包含在您的笔记本中,位于代码旁边。可能还值得阅读 How to make IPython notebook matplotlib plot inline 以了解如何在您的代码中使用它。

如果您还需要交互性,您可以将 nbagg backend%matplotlib notebook 一起使用(在 IPython 3.x 中),如 here 所述。


好的,但有什么替代方法:如果没有激活这样的魔法,我怎么能看到情节?
更具体地说,这是一个Built-in magic command
@JaakL 使用 agg 后端时,绘图将在新窗口中呈现,这是大多数环境中的默认设置。最终,绘图的渲染方式取决于 matplotlib 在该环境中使用的后端。
请注意,对于 Google 的 colab,matplotlib 后端默认设置为 inline(特别是 module://ipykernel.pylab.backend_inline)。
j
jonrsharpe

如果您正在运行 IPython,%matplotlib inline 将使您的绘图输出出现并存储在笔记本中。

根据documentation

要进行此设置,在执行任何绘图或 matplotlib 导入之前,您必须执行 %matplotlib 魔术命令。这为 IPython 与 matplotlib 一起正确工作执行了必要的幕后设置;但是,它实际上并没有执行任何 Python 导入命令,也就是说,没有将名称添加到命名空间。 IPython 提供的一个特别有趣的后端是内联后端。这仅适用于 Jupyter Notebook 和 Jupyter QtConsole。可以按如下方式调用它: %matplotlib inline 使用此后端,绘图命令的输出将在 Jupyter 笔记本等前端内联显示,直接在生成它的代码单元下方。然后,生成的图也将存储在笔记本文档中。


p
prosti

解释清楚:

如果你不喜欢这样:

https://i.stack.imgur.com/vfLgd.png

添加%matplotlib inline

https://i.stack.imgur.com/9kRLw.png

你的jupyter笔记本中有它。


您的第二个代码错过了使用 %matplotlib inline 的全部意义。重点是现在您不需要使用您仍在第二个代码中使用的 plt.show()。另一个有趣的事实是,在您的第二个代码中,该图仍会出现在 jupyter 笔记本中即使您不使用 % matplotlib inline 而只是使用 plt.show()。阅读我的以下问题 here,即使在今天也没有答案。
是的,我们使用的软件中存在某些错误。我通常喜欢写清晰的命令。这意味着 plt.show() 应该存在。 %matplotlib inline 的魔力也应该存在,即使它可能默认设置在某个地方。
但是当您明确使用 matplotlib 内联时,我真的不明白为什么要在 jupyter 笔记本中使用 plt.show() 。特别是当您在 jupyter notebook 的上下文中回答这样的问题时
我个人喜欢有一个命令来控制是否应该出现某些东西。我讨厌含蓄或偏袒。想象一下有人错误地设置了 plt.close() 而没有设置 plt.show() 的情况。你重新启动笔记本,你看不到任何东西。所以我仍然会设置 plt.show(),它不会受到伤害。
有趣的。因为我使用 Jupyter Notebook,无论有没有 %matplotlib inline,输出总是第二种情况。窗户永远不会弹出。
Y
Yossarian42

如果您想向 Jupyter 笔记本添加绘图,则 %matplotlib inline 是标准解决方案。还有其他魔术命令将在 Jupyter 中以交互方式使用 matplotlib

%matplotlib:任何 plt 绘图命令现在都会打开一个图形窗口,并且可以运行更多命令来更新绘图。某些更改不会自动绘制,要强制更新,请使用 plt.draw()

%matplotlib notebook:将导致交互式绘图嵌入笔记本中,可以缩放和调整图形大小

%matplotlib inline:只在笔记本中绘制静态图片


A
Ani Menon

TL;博士

%matplotlib inline - 显示内联输出

IPython 内核能够通过执行代码来显示绘图。 IPython 内核旨在与 matplotlib 绘图库无缝协作以提供此功能。

%matplotlib 是一个神奇的命令,它执行必要的幕后设置,以使 IPython 与 matplotlib 一起正常工作;它不执行任何 Python 导入命令,即不向命名空间添加名称。

在单独的窗口中显示输出

%matplotlib

内联显示输出

(仅适用于 Jupyter Notebook 和 Jupyter QtConsole)

%matplotlib inline

显示交互式后端

(有效值 'GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template'

%matplotlib gtk

示例 - GTK3Agg - 将 Agg 渲染到 GTK 3.x 画布(需要 PyGObject 和 pycairo 或 cairocffi)。

有关 matplotlib 交互式后端的更多详细信息:here

从 IPython 5.0 和 matplotlib 2.0 开始,您可以避免使用 IPython 的特定魔法并使用 matplotlib.pyplot.ion()/matplotlib.pyplot.ioff() ,它们也具有在 IPython 之外工作的优点。

参考:IPython Rich Output - Interactive Plotting


真正的菜鸟问题,抱歉....什么是“IPython 内核”,什么是“魔术命令”。 Python 是否突然向我分裂并变得非 Python 化了?我从来没有听说过这些概念。
对于 python notebook(ipynb) - ipython kernal 或 jupyter kernal 是项目要使用的 python(和依赖项)的版本。您可以启动一个 jupyter notebook,然后更改内核以使用不同的 python 配置运行单元并配置环境变量等等。
@Ib_so 魔术命令是 ipython/jupyter 功能。 Read more here.
A
Arushi Jain

这只是意味着我们作为代码的一部分创建的任何图形都将出现在同一个笔记本中,而不是出现在单独的窗口中,如果我们没有使用这个神奇的语句就会发生这种情况。


V
Vicki B

从 IPython 5.0 和 matplotlib 2.0 开始,您可以避免使用 IPython 的特定魔法并使用 matplotlib.pyplot.ion()/matplotlib.pyplot.ioff() ,它们也具有在 IPython 之外工作的优点。

ipython docs


我认为这与更改后端不同。除非后端是 inline,否则绘图是在外部窗口中生成的,您需要使用 display() 在笔记本中显示它们。
无论它与更改后端是否不同,它确实在运行 x 服务器时帮助我在 ipython 终端中运行。
D
Dipen Gajjar

如果您不知道后端是什么,可以阅读以下内容:https://matplotlib.org/tutorials/introductory/usage.html#backends

有些人从 python shell 交互地使用 matplotlib,并在他们键入命令时弹出绘图窗口。有些人运行 Jupyter 笔记本并绘制内联图以进行快速数据分析。其他人将 matplotlib 嵌入到 wxpython 或 pygtk 等图形用户界面中以构建丰富的应用程序。有些人在批处理脚本中使用 matplotlib 从数值模拟中生成 postscript 图像,还有一些人运行 Web 应用程序服务器来动态提供图形。为了支持所有这些用例,matplotlib 可以针对不同的输出,这些功能中的每一个都称为后端; “前端”是面向用户的代码,即绘图代码,而“后端”在幕后完成所有艰苦的工作以制作图形。

因此,当您键入 %matplotlib inline 时,它会激活内联后端。如前几篇文章所述:

使用这个后端,绘图命令的输出会在 Jupyter 笔记本等前端内联显示,直接在生成它的代码单元下方。然后,生成的图也将存储在笔记本文档中。


A
Ashiq Imran

如果您正在运行 Jupyter Notebook,则 %matplotlib 内联命令将使您的绘图输出出现在笔记本中,也可以存储。


M
Matthieu Brucher

这不是强制性的。没有 (%matplotlib) 魔术功能,它对我来说很好。我正在使用 Sypder 编译器,它是 Anaconda 自带的。


Spyder 是一个 IDE,而不是编译器。
虽然您的回答没有回答 OP 的问题,但它确实回答了我的问题。谢谢你。