ショートカットキーでのPyplotリアルタイムプロットのコントロール

前回紹介したPyplotでのリアルタイムプロット更新において、キー入力で更新の停止、再開などを制御する方法


簡易コード

前回コードで、pyplot.subplots()で生成されたFigureオブジェクトのcanvasmpl_connect()でイベント関数をバインドします

...
class RealtimePlot:
    def __init__(self):
        self.fig, self.ax = plt.subplots()
        ...
        self.update = True  # 描画更新の制御フラグ
        self.fig.canvas.mpl_connect('key_press_event', self.key_press)  # キーイベントをバインド
        self.ani = FuncAnimation(self.fig, self.update_data,
                                 init_func=self.plot_init,
                                 frames=None)
        plt.show()
...
    def update_data(self, _):
        self.receive_data_dummy()
        # self.updateがFalseの時は描画を停止 (データ受信は継続)
        if self.update: # Trueの時のみ描画を更新
            ....

        return self.ln.values()
...
    def key_press(self, event):
        if event.key == ' ':        # スペースで停止
            self.update = False     # 描画停止
        elif event.key == 'ctrl+ ': # CTRL + スペースで再開
            self.update = True      # 描画更新

event.keyは入力されたキーの文字がセットされています。例にあるようにCtrl + aなどの修飾キーも使用可能です

またmpl_connect()でバインドできるイベントしては、キープレス以外にも、キーリリース(key_release_event)やマウスイベントなどがあります。

詳細は公式ドキュメントを参照してください

おすすめ