MEP23: GUI ウィンドウごとに複数の Figure #
ステータス番号
討論
ブランチとプルリクエスト#
前作 - https://github.com/matplotlib/matplotlib/pull/2465 To-delete
アブストラクト#
同じ下に複数の図をグループ化する可能性を追加します
FigureManager
詳細な説明#
現在の構造では、すべてのキャンバスに独自のウィンドウがあります。
これは、ほとんどのユースケースで望ましい操作方法であり、今後もそうなる可能性があります。
同時に開いている Figure が多すぎる場合、これらを同じウィンドウの下にグループ化できることが望ましい場合があります [参照]( https://github.com/matplotlib/matplotlib/issues/2194 )。
提案されたソリューションはFigureManagerBase
、複数の を含めて管理するように変更されますCanvas
。設定パラメーターは、 MultiFigureの動作が必要なrcParams["backend.multifigure"]
場合に制御します。
ノート
提案されたソリューションは、[MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) が既に配置されていることを前提としていることに注意することが重要です。これは単純に、 の実際の実装により、Toolbar
キャンバス間の切り替えが非常に難しくなるためです。
実装#
最初の実装は、ノートブックをキャンバス コンテナーとして使用して GTK3 で行われます。
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']
True の 場合:FigureManager
新しいオブジェクトを作成する代わりに、最後のオブジェクトが使用されます。
下位互換性#
MultiFigureプロパティを表示するには、ユーザーがそれらを直接有効にする必要があります。rcParams['backend.multifigure'] =
True
MultiFigureマジックをまだ実装していなくても、現在のFigureManagerBase
構造に準拠するバックエンドに対しては下位互換性があるはずです。
代替案#
を変更する代わりにFigureManagerBase
、
. これにより、カスタムメイドのバックエンドに問題がないことが保証されますが、コードが大きくなり、維持するものが増えます。rcParams['backend.multifigure'] = True