互动人物#
在处理数据时,交互性是无价的。Matplotlib GUI 窗口中内置的平移/缩放和鼠标定位工具通常就足够了,但您也可以使用事件系统来构建自定义的数据探索工具。
Matplotlib 附带与多个 GUI 工具包(Qt、Tk、Wx、GTK、macOS、JavaScript)的后端绑定,第三方包提供与kivy和Jupyter Lab的绑定。为了使图形响应鼠标、键盘和绘制事件,GUI 事件循环需要与交互式提示集成。我们推荐使用 IPython(见下文)。
该pyplot
模块提供用于显式创建图形的功能,包括交互式工具、工具栏、工具提示和
键绑定:
pyplot.figure
创建新的空
Figure
图或选择现有图窗pyplot.subplots
pyplot
有一个可以通过 访问的“当前图形”pyplot.gcf
的概念和一个通过 访问的“当前轴”的概念pyplot.gca
。几乎所有的函数都pyplot
通过当前的Figure
/ Axes
(或创建一个)适当地传递。
Matplotlib 保留对通过pyplot.figure
or创建的所有打开图形的引用,pyplot.subplots
这样图形就不会被垃圾收集。Figure
s 可以通过单独关闭和pyplot
注销
pyplot.close
;所有 openFigure
都可以通过plt.close('all')
.
有关 Matplotlib 的事件系统和集成事件循环的更多讨论,请阅读:
IPython 集成#
我们建议将 IPython 用于交互式 shell。除了其所有功能(改进的制表符补全、魔术、多行编辑等)之外,它还确保 GUI 工具包事件循环与命令行正确集成(请参阅命令提示符集成)。
在此示例中,我们通过 IPython 提示创建和修改图形。该图显示在 QtAgg GUI 窗口中。要配置集成并启用交互模式,请使用以下
%matplotlib
魔法:
In [1]: %matplotlib
Using matplotlib backend: QtAgg
In [2]: import matplotlib.pyplot as plt
创建一个新的图形窗口:
In [3]: fig, ax = plt.subplots()
将数据的线图添加到窗口:
In [4]: ln, = ax.plot(range(5))
将线的颜色从蓝色更改为橙色:
In [5]: ln.set_color('orange')
如果您希望禁用绘图的自动重绘:
In [6]: plt.ioff()
如果您希望重新启用绘图的自动重绘:
In [7]: plt.ion()
在最新版本的Matplotlib
and中,导入和调用IPython
就足够了。保证在所有版本的 Matplotlib 和 IPython 中都可以使用魔法。matplotlib.pyplot
pyplot.ion
%
交互模式#
启用交互模式。 |
|
禁用交互模式。 |
|
返回是否在每个绘图命令后更新绘图。 |
显示所有打开的数字。 |
|
为间隔秒运行 GUI 事件循环。 |
交互模式控制:
是否自动显示创建的图形
对艺术家的更改是否会自动触发重新绘制现有人物
当
pyplot.show()
不给定参数时返回:立即,或在所有图形都已关闭之后
如果处于交互模式:
新创建的数字将立即显示
当元素改变时,图形会自动重绘
pyplot.show()
显示数字并立即返回
如果不在交互模式下:
新创建的图形和对图形的更改直到
pyplot.show()
运行 GUI 事件循环并且在所有绘图窗口关闭之前不会返回
如果您处于非交互模式(或在非交互模式下创建图形),您可能需要显式调用pyplot.show
以在屏幕上显示窗口。如果您只想在固定时间内运行 GUI 事件循环,则可以使用pyplot.pause
. 这将阻止您的代码进度,就像您调用了 一样
time.sleep
,确保显示当前窗口并在需要时重新绘制,并在指定的时间段内运行 GUI 事件循环。
与命令提示符集成的 GUI 事件循环和处于交互模式的图形是相互独立的。如果您使用pyplot.ion
但未安排事件循环集成,则在提示等待输入时,您的图形将出现但不会交互。您将无法平移/缩放,甚至可能无法渲染图形(窗口可能显示为黑色、透明或作为其下方桌面的快照)。相反,如果您配置事件循环集成,则无论 pyplot 的“交互模式”如何,显示的图形都会在等待提示输入时做出响应。
无论交互模式设置和事件循环集成如何组合,如果您使用 、 或以其他方式运行 GUI 主循环,图形都会pyplot.show(block=True)
响应pyplot.pause
。
警告
使用Figure.show
它可以在屏幕上显示图形而无需启动事件循环且无需处于交互模式。这可能有效(取决于 GUI 工具包),但可能会导致图形无响应。
默认用户界面#
创建的窗口pyplot
有一个带有导航按钮的交互式工具栏和光标指向的数据值的读数。默认情况下注册了许多有用的键绑定。
其他 Python 提示#
交互模式在默认的 Python 提示符下工作:
>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>
但是,这并不能确保事件挂钩已正确安装,并且您的图形可能没有响应。有关详细信息,请参阅您的 GUI 工具包的文档。
Jupyter 笔记本/JupyterLab #
笔记
要获得此处描述的交互式功能,您必须使用交互式后端。笔记本中的默认后端,即内联后端,不是。backend_inline
渲染一次图形并在执行单元格时将静态图像插入笔记本中。因为图像是静态的,它们不能被平移/缩放、接受用户输入或从其他单元格更新。
要在“经典”笔记本或 Jupyter 实验室中获得交互式图形,请使用使用ipywidget框架的ipympl后端(必须单独安装)。如果安装使用魔法:ipympl
%matplotlib widget
选择并启用它。
如果只需要使用经典笔记本,可以使用
%matplotlib notebook
它使用backend_nbagg
Matplotlib 提供的后端;但是,nbagg 在 Jupyter Lab 中不起作用。
图形用户界面 + Jupyter #
您还可以ipympl
在 Jupyter Notebook 中使用非 GUI 后端之一。如果您在本地运行 Jupyter 内核,GUI 窗口将在您的桌面上与您的 Web 浏览器相邻生成。如果您在远程服务器上运行笔记本,内核将尝试在远程计算机上打开 GUI 窗口。除非您已安排将 xserver 转发回您的桌面,否则您将无法看到该窗口或与该窗口进行交互。它也可能引发异常。
PyCharm、Spyder 和 VSCode #
许多 IDE 都内置了与 Matplotlib 的集成,请查阅他们的文档以获取配置详细信息。