%matplotlib内联的具体用途是什么?


当前回答

要解释清楚:

如果你不喜欢这样:

添加%matplotlib内联

在你的jupyter笔记本里。

其他回答

这不是强制性的。如果没有(%matplotlib)魔法函数,它对我来说很好。我使用的是Anaconda附带的Sypder编译器。

如果您正在运行IPython,%matplotlib内联将使绘图输出显示并存储在笔记本中。

根据文件

要设置此设置,在绘制或导入matplotlib之前执行后,必须执行%matplotlib magic命令。这执行IPython工作所需的幕后设置正确使用matplotlib;然而,实际上执行任何Python导入命令,即没有名称添加到命名空间。IPython提供的一个特别有趣的后端是内联后端。这仅适用于Jupyter笔记本和Jupyter QtConsole。它可以按如下方式调用:%matplotlib内联使用此后端,打印命令的输出以内联方式显示在Jupyter笔记本等前端,代码正下方生成它的单元格。生成的绘图也将存储在笔记本文档。

我认为,在Jupyter/matplotlib的最新版本中,图形是“内联”绘制的,无需使用%matplotlib内联。

所以有人可能会认为这个命令现在是无用的…但据我理解,它创建了一个配置绘图参数的“管理器”。Matplotlib在创建地物时查找现有管理器,并在必要时创建一个管理器。matplotlib.pyplot.figure内部:

    manager = _pylab_helpers.Gcf.get_fig_manager(num)
    if manager is None:
        # not relevant stuff…
        manager = new_figure_manager(
            num, figsize=figsize, dpi=dpi,
            facecolor=facecolor, edgecolor=edgecolor, frameon=frameon,
            FigureClass=FigureClass, **kwargs)

现在,设置绘图参数(rcParams)本身不会创建“管理器”。因此,当第一次绘制地物时,将创建一个新的管理器,并覆盖您的参数。

注释/取消注释%matplotlib内联并查看结果。(不要忘记在每次尝试之间重新启动内核!)

import matplotlib.pyplot as plt
from matplotlib.image import imread
# %matplotlib inline

plt.rcParams["figure.dpi"] = 200
plt.imshow(imread("path_to_your_image"))
print(plt.rcParams["figure.dpi"])

%matplotlib是IPython中的一个神奇函数。为了方便阅读,我将在此处引用相关文档:

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

%matplotlib inline将matplotlb的后端设置为“inline”后端:

使用此后端,绘图命令的输出在前端(如Jupyter笔记本)直接显示在生成它的代码单元的下方。生成的绘图也将存储在笔记本文档中。

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

如果您也想要交互性,可以使用nbagg后端和%matplotlib笔记本(在IPython 3.x中),如下所述。

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