MEP23:每个 GUI 窗口有多个图形#
状态#
讨论
分支和拉取请求#
以前的工作 - https://github.com/matplotlib/matplotlib/pull/2465 删除
摘要#
添加将多个数字分组在同一个下的可能性
FigureManager
详细说明#
在当前结构下,每个画布都有自己的窗口。
对于大多数用例来说,这是并且可能继续是所需的操作方法。
有时当同时打开太多图形时,希望能够将它们分组在同一个窗口下 [参见]( https://github.com/matplotlib/matplotlib/issues/2194 )。
建议的解决方案修改FigureManagerBase
为包含和管理多个Canvas
. 设置参数rcParams["backend.multifigure"]
控制何时需要MultiFigure行为。
笔记
需要注意的是,建议的解决方案假设 [MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) 已经到位。这仅仅是因为实际的实现Toolbar
使得在画布之间切换非常困难。
实施#
第一个实现将在 GTK3 中使用 Notebook 作为画布容器完成。
FigureManagerBase
#
将添加以下新方法
add_canvas
:将画布添加到现有FigureManager
对象remove_canvas
: 从一个FigureManager
对象中移除一个画布,如果它是最后一个,它将被销毁move_canvas
:将画布从一个FigureManager
移到另一个。set_canvas_title
:更改与特定画布容器关联的标题get_canvas_title
:获取与特定画布容器关联的标题get_active_canvas
:获取位于前台并受 gui 事件影响的画布。没有set_active_canvas
,因为活动画布是show
在对象上调用时定义的Canvas
。
new_figure_manager
#
为了控制哪些FigureManager
将包含新图形,将添加一个额外的可选参数figuremanager,该参数值将传递给new_figure_manager_given_figure
.
new_figure_manager_given_figure
#
如果给出了figuremanager参数,
FigureManager
则将使用此对象而不是创建一个新对象。如果
rcParams['backend.multifigure']
为真:FigureManager
将使用最后一个对象而不是创建一个新对象。
向后兼容性#
为了使MultiFigure属性可见,用户必须直接激活它们设置rcParams['backend.multifigure'] =
True
它应该向后兼容遵循当前FigureManagerBase
结构的后端,即使它们尚未实现MultiFigure魔法。
替代方案#
除了修改之外,FigureManagerBase
还可以添加一个并行类来处理
. 这将保证定制后端不会有任何问题,但也会使代码更大,需要维护的东西更多。rcParams['backend.multifigure'] = True