2019年7月23日火曜日

matplotlibでマウスやらキーボードのイベントを取得する


 ブログ更新をさぼりにサボっていた中の人です.研究室とバイトとマウスに明け暮れたら,いつの間にか金と時間が溶けていました.
 私事ではございますが,大学院に進学することが決まりもう少しだけ学生でいられそうです.やったね(白目)

 それはさておき,今回はmatplotlibでマウスやらキーボードのイベントを取得する話です.

概略
 みんな大好きmatplotlibなのですが,実はマウスやキーボード,その他もろもろのイベントを拾うことができます.これによってグラフに表示されているデータをいじったりすることが可能です.

イベントの種類
 トリガとして扱えるイベントは以下の通り.
  1. button_press_event       : マウスのボタンが押されたら
  2. button_release_event    : マウスのボタンが離されたら
  3. draw_event                   : キャンバスが更新されたら
  4. key_press_event           : キーボードのボタンが押されたら
  5. key_press_event           : キーボードのボタンが離されたら
  6. motion_notify_event      : カーソルが動いたら
  7. pick_event                    : キャンバス内のオブジェクトが選択されたら
  8. resize_event                 : figureキャンバスがリサイズされたら
  9. scroll_event                  : マウスホイールが回ったら
  10. figure_enter_event        : カーソルがfigureの中に入ったら
  11. figure_leave_event        : カーソルがfigureの中から出たら
  12. axis_enter_event           : カーソルがaxisの中に入ったら
  13. axis_leave_event           : カーソルがaxisの中から出たら
参考:https://matplotlib.org/users/event_handling.html?highlight=event%20handling%20picking

使い方
 イベント発生時に動かしたい関数を事前に準備しておき,canvasに紐づける感じです.

#クリック時にカーソルの座標を取得する
def Click(event):
    print("x=%d, y=%d" % (event.x, event.y))

#紐づける
fig.canvas.mpl_connect("button_press_event", Click)

2020/8/17 追記:上記のmplの部分がmlpだったのを修正

eventはマウスカーソルの位置や選択したデータの値,マウスやキーボードの押したボタンなどを取得するために使うやつです.取得できるのは以下の通り

  1. x, y : canvas内のピクセル
  2. inaxis : カーネルがaxisを超えたかどうか(True/False)
  3. xdata, ydata : 選択されたデータ
  4. button : 押されていたマウスのボタン(None, 1, 2, 3, 'up', 'down')
  5. key : 押されていたキーボードのボタン(None, すべての文字,'shift', 'win', 'ctrl')


最後に
 便利機能が結構仕込まれているmatplotlibです.公式のサンプル等もあるので,そちらも参考にするといいと思います.


©2018 shts All Right Reserved.