“%matplotlib inline”的目的
- 2025-01-16 08:38:00
- admin 原创
- 122
问题描述:
到底有啥用处%matplotlib inline
?
解决方案 1:
%matplotlib
是 IPython 中的一个神奇函数。为了方便阅读,我在这里引用了相关文档:
IPython 有一组预定义的“魔法函数”,您可以使用命令行样式语法调用它们。魔法函数有两种,面向行和面向单元格。行魔法函数以 % 字符为前缀,其工作方式与 OS 命令行调用非常相似:它们将行的其余部分作为参数,其中传递参数时无需括号或引号。行魔法函数可以返回结果,并且可以在赋值的右侧使用。单元格魔法函数以两个 %% 为前缀,它们是不仅将行的其余部分作为参数,还将行下方的行作为单独参数的函数。
%matplotlib inline
将 matplotlib 的后端设置为“内联”后端:
使用此后端,绘图命令的输出会以内联方式显示在 Jupyter 笔记本等前端中,直接显示在生成它的代码单元下方。生成的绘图也将存储在笔记本文档中。
使用“内联”后端时,您的 matplotlib 图表将包含在笔记本中,位于代码旁边。还值得一读如何使 IPython 笔记本 matplotlib 绘图内联,以了解如何在代码中使用它。
如果您也想要交互性,您可以使用nbagg后端%matplotlib notebook
(在 IPython 3.x 中),如此处所述。
解决方案 2:
解释清楚一点:
如果你不喜欢这样:
添加%matplotlib inline
现在可以在你的 jupyter 笔记本中看到它了。
解决方案 3:
只要您正在运行 IPython,它就%matplotlib inline
会使您的绘图输出出现并存储在笔记本中。
根据文献
要进行设置,在
matplotlib
执行任何绘图或导入之前,您必须执行%matplotlib magic command
。这将执行必要的幕后设置,以使 IPython 能够与 正确协同工作matplotlib
;但是,它实际上并不执行任何 Python 导入命令,也就是说,没有名称添加到命名空间。IPython 提供的一个特别有趣的后端是
inline
后端。这仅适用于 Jupyter Notebook 和 Jupyter QtConsole。它可以按如下方式调用:%matplotlib inline
使用此后端,绘图命令的输出会以内联方式显示在 Jupyter 笔记本等前端中,直接显示在生成它的代码单元下方。生成的绘图也将存储在笔记本文档中。
解决方案 4:
如果您想将图表添加到 Jupyter 笔记本中,那么这%matplotlib inline
是一个标准解决方案。还有其他神奇命令将matplotlib
在 Jupyter 中交互使用。
%matplotlib
:plt
现在任何绘图命令都会导致图形窗口打开,并且可以运行进一步的命令来更新绘图。某些更改不会自动绘制,要强制更新,请使用plt.draw()
%matplotlib notebook
:将导致笔记本中嵌入交互式图表,您可以缩放和调整图表大小
%matplotlib inline
:仅在笔记本中绘制静态图像
解决方案 5:
它只是意味着我们作为代码的一部分创建的任何图形都将出现在同一个笔记本中,而不是出现在单独的窗口中,如果我们没有使用这个神奇的语句就会发生这种情况。
解决方案 6:
总结
%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 交互式后端的更多详细信息:此处
从
IPython 5.0
和 开始,matplotlib 2.0
您可以避免使用 IPython 特定的魔法并使用matplotlib.pyplot.ion()
/,matplotlib.pyplot.ioff()
这也具有在 IPython 之外工作的优点。
参考:IPython Rich Output - 交互式绘图
解决方案 7:
从 IPython 5.0 和 matplotlib 2.0 开始,您可以避免使用 IPython 的特定魔法,并且使用
matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()
它同样具有在 IPython 之外工作的优势。
ipython 文档
解决方案 8:
如果您不知道后端是什么,您可以阅读此内容:
https ://matplotlib.org/stable/users/explain/backends.html
有些人从 Python shell 以交互方式使用 matplotlib,并在输入命令时弹出绘图窗口。有些人运行 Jupyter 笔记本并绘制内联图表以进行快速数据分析。其他人将 matplotlib 嵌入到 wxpython 或 pygtk 等图形用户界面中以构建丰富的应用程序。有些人在批处理脚本中使用 matplotlib 从数值模拟中生成后记图像,还有一些人运行 Web 应用程序服务器来动态提供图表。为了支持所有这些用例,matplotlib 可以针对不同的输出,并且这些功能中的每一个都称为后端;“前端”是面向用户的代码,即绘图代码,而“后端”在幕后完成制作图形的所有艰苦工作。
因此,当您输入 %matplotlib inline 时,它会激活内联后端。正如之前的帖子所讨论的:
使用此后端,绘图命令的输出会以内联方式显示在 Jupyter 笔记本等前端中,直接显示在生成它的代码单元下方。生成的绘图也将存储在笔记本文档中。
解决方案 9:
如果你正在运行 Jupyter Notebook,%matplotlib inline 命令将使你的绘图输出出现在笔记本中,也可以存储。
解决方案 10:
我认为,使用最新版本的 Jupyter/matplotlib,图形是“内联”绘制的,无需使用%matplotlib inline
。
因此,有人可能会认为此命令现在毫无用处……但据我了解,它会创建一个配置绘图参数的“管理器”。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 inline
并查看会发生什么。(不要忘记在每次尝试之间重新启动内核!)
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"])
解决方案 11:
在 Jupyter Notebook 5.0 之前的版本中,%matplotlib inline 命令可确保 Matplotlib 图以内联方式显示在笔记本中,位于生成该图的代码单元正下方。但是,使用 %matplotlib inline1 时,您无需调用 plt.show() 来显示图。在代码中包含 %matplotlib inline 命令后,您创建的任何 Matplotlib 图都将自动以内联方式显示在笔记本中,而无需调用 plt.show()。
当我们在 Jupyter Notebook 5.0 之前的版本中调用 plt.show() 而不使用 %matplotlib inline 时,图默认显示在单独的弹出窗口中。
在 Jupyter Notebook ≥ 5.0 中,--> 在 Jupyter Notebook 5.0 及以上版本中,图表会自动以内联方式显示(无需写入 %matplotlib inline)。是否使用 plt.show() 来显示图表是可选的。
解决方案 12:
这不是必须的。对我来说,没有 ( %matplotlib
) 魔法函数也能正常工作。我使用的是 Sypder 编译器,它是 Anaconda 中自带的编译器。