matplotlib部品の長方形の選区(Rectanglector)の実現


長方形の選択範囲の概要
長方形の選択領域はよくあるオブジェクト選択方式で、この名詞は最もよくあるPhotoshopの中で、一つのサブマップでマウスをドラッグする長方形領域の要素を選択します。matplotlibの中の矩形選択領域は部品に属します。
長方形の選区は具体的にmatplotlib.widgets.Rectanglector類と定義されています。相続関係はWidget->>AxesWidget->_SelectorWidget->Rectanglector。
Rectanglector類の署名はclass matplotlib.widgets.Rectanglector(ax、onselector、drawtype='box'、minspanx=0、minspany=0、useblit=False、lineats=None、rectprops=None、spants=Martun=10props=None、interactive=False、state_modifier_keys=None)
Rectanglectorクラスの構造関数のパラメータは以下の通りです。
  • ax:矩形選択領域が有効となるサブ図であり、タイプはmaplotlib.axes.Axesの例である。
  • onselect:長方形のエリア選択が完了した後に実行されるコールバック関数は、関数署名がdef onselect(eclick:MouseEvent、erelease:MouseEvent)であり、eclickとereleaseはそれぞれ開始と終了時のマウスイベントである。
  • drawtype:長方形の選択エリアの外観は、値の範囲が{box”、“ライン”、“none”、“box”は長方形の枠で、“ライン”は長方形の選択エリアの対角線で、“none”は外観がなくて、タイプは文字列で、デフォルト値は“box”です。
  • ラインprops:drawtype==ラインの属性の場合、デフォルト値はdict(カラー=「black」、ラインスタイル=「-」、ラインwidth=2、alpha=0.5)です。
  • rectprops:drawtype==boxの場合の矩形枠の属性は、デフォルト値がdict(face色=red)、edged="black"alpha=0.2,fill=True)です。
  • button:矩形選択をトリガするマウスボタン、MouseButtonリストを設定し、デフォルトではすべてのマウスボタンです。
  • interactive:インタラクションを許可するかどうか、ブール値、デフォルトはFalseで、つまり選択が完了したら選択が消えます。
  • state_modifier_keys:ショートカットキーの設定、タイプは辞書です。
  • 「move」:既存の選択領域を移動します。デフォルトでは修飾キーがありません。
  • 「clear」:既存の選択領域をクリアし、デフォルトは「escape」、すなわちescキーです。
  • 「スクウェア」:正方形の選択エリアで、デフォルトは「shift」です。
  • 「センター」:現在のポイントを選択の中心として、デフォルトは「ctrl」です。
  • 「スクウェア」と「センター」は組み合わせて使用できます。
  • ケース
    政府のケース、https://matplotlib.org/gallery/widgets/rectangle_selector.
    判例説明
    マウスをドラッグして長方形の選択を描き、デフォルトはインタラクティブモードで、選択枠を表示し、escボタンを押して選択をキャンセルし、コンソールに選択範囲の座標と使用するマウスボタンを表示します。tキーを押して矩形選択機能のアクティブ状態を切り替えます。非アクティブ状態の矩形選択機能は有効ではありません。

    コンソール出力:
    (0.74、-0.38)-』(8.90、0.75)
     The buttons you used were:1
    コード解析
    
    from matplotlib.widgets import RectangleSelector
    import numpy as np
    import matplotlib.pyplot as plt
    
    #             
    def line_select_callback(eclick, erelease):
      """
      Callback for line selection.
    
      *eclick* and *erelease* are the press and release events.
      """
      x1, y1 = eclick.xdata, eclick.ydata
      x2, y2 = erelease.xdata, erelease.ydata
      print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
      print(f" The buttons you used were: {eclick.button} {erelease.button}")
    
    #            ,active   set_active     _SelectorWidget 
    def toggle_selector(event):
      print(' Key pressed.')
      if event.key == 't':
        if RS.active:
          print(' RectangleSelector deactivated.')
          RS.set_active(False)
        else:
          print(' RectangleSelector activated.')
          RS.set_active(True)
    
    #   
    fig, ax = plt.subplots()
    N = 100000 # If N is large one can see improvement by using blitting.
    x = np.linspace(0, 10, N)
    
    ax.plot(x, np.sin(2*np.pi*x)) # plot something
    ax.set_title(
      "Click and drag to draw a rectangle.
    " "Press 't' to toggle the selector on and off.") # , , , # drawtype is 'box' or 'line' or 'none' RS = RectangleSelector(ax, line_select_callback, drawtype='box', useblit=True, button=[1, 3], # disable middle button minspanx=5, minspany=5, spancoords='pixels', interactive=True) # , fig.canvas.mpl_connect('key_press_event', toggle_selector) plt.show()
    ここでは、matplotlib部品の矩形選択エリアの実現に関する記事を紹介します。これに関連して、matplotlib矩形選択エリアの内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。