%matplotlib
是IPython中的一个 魔法函数。我会为您引用相关文档以便于阅读:
IPython有一组预定义的“魔法函数”,可以使用命令行风格的语法调用。有两种类型的魔法,一种是行向魔法,另一种是单元格魔法。行魔法以%字符为前缀,并且与操作系统命令行调用非常相似:它们将剩余的行作为参数传递,其中参数不带括号或引号。行魔法可以返回结果,并且可以在赋值的右侧使用。单元格魔法以两个%%为前缀,它们是函数,不仅将剩余的行作为参数,而且还将其下面的行作为单独的参数。
%matplotlib inline
设置matplotlib的后端为“inline”后端:
%matplotlib notebook
(在IPython 3.x中),如此处所述。
agg
后端时,图形将在新窗口中呈现,这是大多数环境中的默认设置。最终,图形的呈现方式取决于Matplotlib在该环境中使用的后端。 - zr0gravity7inline
(具体来说是module://ipykernel.pylab.backend_inline
)。 - zr0gravity7%matplotlib inline
)是将图表“内联”显示。在我的生活中,我从未遇到过图表出现在新窗口中或者根本不显示的情况。图表总是,总是出现在定义它的单元格下方。这感觉像是解决一个不存在的问题。我错过了什么吗? - NaiveBaeimport matplotlib.pyplot as plt
,那么图表总是会出现在笔记本中。即使你使用面向对象的接口,通过fig, ax = plt.subplots()
,你仍然在激活pyplot
的隐式接口。如果你改用纯面向对象的接口,并且以from matplotlib.figure import Figure
导入,那么你会发现,除非你指定要使用的后端,否则图表将不会显示。 - undefined为了更清楚地解释:
如果您不喜欢这样:
请添加%matplotlib inline
然后在您的jupyter笔记本中就可以看到它了。
%matplotlib inline
的全部意义。整个意义在于现在你不需要再使用plt.show()
,而你在第二个代码中仍在使用它。还有一个有趣的事实,在你的第二段代码中,即使你不使用%matplotlib inline
而只是使用plt.show()
,图形仍会出现在Jupyter笔记本中。请阅读我下面的问题 here,即使到今天也没有得到回答。 - Sheldoreplt.show()
应该存在。即使可能已经在某个地方默认设置了 %matplotlib inline
的魔法,它也应该存在。 - prostiplt.show()
。特别是当你在jupyter笔记本的上下文中回答这样的问题时。 - Sheldoreplt.close()
而没有设置 plt.show()
的情况。你重新启动笔记本电脑,却发现什么也没有显示出来。所以我仍然会设置 plt.show()
,这不会有任何坏处。 - prosti%matplotlib inline
,输出始终是第二种情况,窗口从未弹出。 - Paw in Data%matplotlib inline
必须是较新版本的 Jupyter Notebook 的默认设置。 - Michael Bergstrom如果您正在运行IPython,则%matplotlib inline
将使您的图形输出在笔记本中显示并存储。
根据文档
要设置这个功能,在任何绘图或导入
matplotlib
之前,您必须执行%matplotlib
魔法命令。此举对于让IPython与matplotlib
正确协同工作是必要的;但它不执行任何Python导入命令,也就是说,不会将任何名称添加到命名空间中。由IPython提供的一个特别有趣的后端是
inline
后端。它只适用于Jupyter Notebook和Jupyter QtConsole。可以按以下方式调用:%matplotlib inline
使用这个后端,绘图命令的输出会在前端(如Jupyter笔记本)中内联显示,在生成它的代码单元格的正下方。生成的图形也将存储在笔记本文档中。
%matplotlib inline
是一个标准解决方案。还有其他魔术命令将在Jupyter内部交互使用matplotlib
。
%matplotlib
: 任何plt
绘图命令都会打开一个图形窗口,可以运行进一步的命令来更新绘图。一些更改不会自动绘制,要强制更新,请使用plt.draw()
%matplotlib notebook
: 将导致嵌入到笔记本中的交互式绘图,您可以缩放和调整图形大小。
%matplotlib inline
: 在笔记本中只绘制静态图像。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交互式后端的更多详细信息: 此处
从
IPython 5.0
和matplotlib 2.0
开始,您可以避免使用 IPython的特定魔法,而使用matplotlib.pyplot.ion()
/matplotlib.pyplot.ioff()
, 它们具有在IPython之外工作的优点。
matplotlib.pyplot.ion() / matplotlib.pyplot.ioff()
,这两个函数也适用于IPython以外的环境。
ipython文档如果您正在运行Jupyter Notebook,则%matplotlib inline命令将使您的图形输出显示在笔记本中,也可以存储。
%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"])
%matplotlib --list
来查看可用的后端(如inline
)。 - Luis