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_canvasFigureManager: 既存のオブジェクトにキャンバスを追加するには

  • 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