Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Matplotlib】マウスクリックやキー入力があるまでフィギュアの更新を一時停止する方法

Matplotlib(pylab)で描画した図を、キーが押されるかマウスがクリックされるまで一時停止させたい場合は、「button_press_event」イベントを利用します。このイベントをコールバック関数にバインドすることで、マウス操作に応じて図の更新を自由に一時停止・再開できます。

実装手順

  • figureサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • バックエンドとして「TkAgg」を指定します。
  • インタラクティブモードをONにします。
  • 新しいfigureを作成するか、既存のfigureをアクティブにします。
  • 一時停止状態を管理する変数 pause = False を用意します。
  • 「button_press_event」が発生するたびにpauseフラグを切り替えます。
  • イベントとコールバック関数をバインド(紐付け)します。
  • numpyを使ってx・yのデータポイントを作成します。
  • 無限ループの中で線のデータと色を交互に切り替えながら描画を更新します。
  • 図を表示するには show() メソッドを使用します。

コード例

import matplotlib
from matplotlib import pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

matplotlib.use("TkAgg")

plt.ion()

fig = plt.figure()

pause = False

def onclick(event):
    global pause
    pause = not pause

fig.canvas.mpl_connect('button_press_event', onclick)

data = np.linspace(-10, 10, 100)

x = np.sin(data)
y = np.cos(data)

flag = 1

while True:
    if not pause:
        if flag == 1:
            fig.clear()
            plt.plot(data, y, color='red')
            flag = 0
        else:
            fig.clear()
            plt.plot(data, x, color='yellow')
            flag = 1
    fig.canvas.get_tk_widget().update()

コードのポイント

  • mpl_connect():キャンバスにイベントハンドラを登録し、マウスクリックを検知できるようにします。
  • global pause:コールバック関数内でグローバル変数のpauseフラグを反転させ、一時停止と再開をトグル操作で切り替えます。
  • get_tk_widget().update():TkAggバックエッドのウィジェットを強制的に更新し、描画内容を即座に画面へ反映させます。

出力結果

【Matplotlib】マウスクリックやキー入力があるまでフィギュアの更新を一時停止する方法

プログラムを実行すると、黄色と赤色の正弦波・余弦波が交互に表示され続けます。マウスのいずれかのボタンをクリックすると図の更新が一時停止し、再度クリックするとアニメーションが再開されます。

  1. Matplotlibで3D連続線をプロットする方法

    Matplotlibを使って3次元空間に連続的な線(3Dライン)を描画する方法を解説します。基本的な手順は以下の通りです。3Dプロットの手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x と y のデータポイントを作成します。xとyのデータポイントから z のデータポイントを計算して作成します。figure() メソッドを使って、新しい図を作成するか既存の図をアクティブにします。add_subplot() メソッドに3D投影(projection=3d)を指定して、Axesを追加します。plot() メソッドを使って、x、y、zのデータポ

  2. FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】

    Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http