【问题标题】:Purpose of "%matplotlib inline"“%matplotlib inline”的目的
【发布时间】:2017-08-19 01:45:06
【问题描述】:

%matplotlib inline到底有什么用?

【问题讨论】:

标签: python matplotlib jupyter-notebook ipython


【解决方案1】:

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

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

%matplotlib inlinesets 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)。
【解决方案2】:

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

根据documentation

要设置它,在matplotlib 的任何绘图或导入之前 执行您必须执行%matplotlib magic command。这 执行 IPython 工作所需的幕后设置 与matplotlib正确携手;然而,它不 实际执行任何 Python 导入命令,即没有名字 添加到命名空间。

IPython 提供的一个特别有趣的后端是 inline 后端。这仅适用于 Jupyter Notebook 和 Jupyter QtConsole。调用方式如下:

%matplotlib inline

有了这个后端,绘图命令的输出被内联显示 在 Jupyter 笔记本等前端中,直接在代码下方 产生它的细胞。然后,生成的图也将存储在 笔记本文档。

【讨论】:

    【解决方案3】:

    解释清楚:

    如果你不喜欢这样:

    添加%matplotlib inline

    你的 jupyter notebook 中有它。

    【讨论】:

    • 您的第二个代码错过了使用%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,输出总是第二种情况。 Windows 永远不会弹出。
    【解决方案4】:

    如果您想在 Jupyter 笔记本中添加绘图,那么%matplotlib inline 是标准解决方案。还有其他神奇的命令会在 Jupyter 中以交互方式使用 matplotlib。

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

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

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

    【讨论】:

      【解决方案5】:

      从 IPython 5.0 和 matplotlib 2.0 开始,您可以避免使用 IPython的具体魔法和使用 matplotlib.pyplot.ion()/matplotlib.pyplot.ioff() 其中有 在 IPython 之外工作的优势也是如此。

      ipython docs

      【讨论】:

      • 我认为这与更改后端不同。除非后端是inline,否则绘图是在外部窗口中生成的,您需要使用 display() 在笔记本中显示它们。
      • 无论它是否与更改后端不同,它确实帮助我在 ipython 终端中运行 x-server。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        TL;DR

        %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 是否突然向我分裂并变得非 Pythonic?我从未听说过这些概念。
        • 对于 python notebook(ipynb) - ipython 内核或 jupyter 内核是项目要使用的 python(和依赖项)的版本。您可以启动一个 jupyter notebook,然后更改内核以使用不同的 python 配置运行单元并配置环境变量等等。
        • @Ib_so 魔术命令是 ipython/jupyter 的一项功能。 Read more here.
        【解决方案8】:

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

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

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

        有了这个后端,绘图命令的输出被内联显示 在 Jupyter 笔记本等前端中,直接在代码下方 产生它的细胞。然后,生成的图也将存储在 笔记本文档。

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

            【讨论】:

            • Spyder 是 IDE,而不是编译器。
            • 虽然您的回答没有回答 OP 的问题,但它确实回答了我的问题。谢谢。
            猜你喜欢
            • 2020-09-16
            • 2021-05-02
            • 2015-05-11
            • 2018-06-11
            • 2023-03-29
            • 2016-10-28
            • 1970-01-01
            • 2017-09-18
            相关资源
            最近更新 更多