Python Matplotlibのインタラクティブなプロットでマウスクリック位置の(x, y)座標を取得する方法
Matplotlibで作成したインタラクティブなグラフ上で、マウスでクリックした位置の (x, y) 座標を取得したい場面はよくあります。本記事では、イベントハンドラを使ってマウス操作の座標をリアルタイムに取得・表示する方法を解説します。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- 新しいfigureを作成、または既存のfigureをアクティブ化します。
- イベントハンドラ関数 mouse_event() を、button_press_event(ボタン押下イベント)に接続(バインド)します。
- NumPyを使って x および y のデータポイントを作成します。
- plot() メソッドで x と y のデータをプロットします。
- show() メソッドで図を表示します。
コード例
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
def mouse_event(event):
print('x: {} and y: {}'.format(event.xdata, event.ydata))
fig = plt.figure()
cid = fig.canvas.mpl_connect('button_press_event', mouse_event)
x = np.linspace(-10, 10, 100)
y = np.exp(x)
plt.plot(x, y)
plt.show()仕組みのポイント
このコードの核となるのは fig.canvas.mpl_connect() の部分です。第1引数にイベント名「button_press_event」を指定し、第2引数に呼び出したい関数を渡すことで、グラフ上でのマウスクリックを検知できるようになります。
イベント発生時には Eventオブジェクト が関数に渡され、その属性である event.xdata と event.ydata に、データ座標系におけるクリック位置が格納されています。なお、戻り値の cid(コネクションID)は、後で mpl_disconnect(cid) を使ってイベント接続を解除したい場合に利用できます。
出力結果
このコードを実行すると、次のような指数関数 y = e^x のグラフが表示されます。

グラフ上の任意の場所をクリックすると、クリックした点の座標がコンソールに出力されます。
x: -3.633289020076159 and y: 7344.564590474489 x: 3.2193731551790172 and y: 3255.6463283494704 x: 8.680088326085489 and y: 802.2953710744596 x: 7.680741758860773 and y: 11269.926122114506 x: 0.6139338906288732 and y: 16503.741497634528
応用:他のイベントとの組み合わせ
同様の手法は、クリック以外のイベントにも使えます。たとえば「motion_notify_event」を指定すればマウス移動に追従して座標を取得でき、「key_press_event」ならキーボード入力を検知できます。これらを組み合わせることで、データポイントの選択やアノテーション追加など、より高度なインタラクティブな可視化ツールを構築できます。
-
Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説
MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元
-
Python Matplotlibで円グラフの一部を強調表示して描画する方法
はじめに あなたが最も好きなグラフの種類は何ですか?経営層やビジネスアナリストにこの質問をすると、即座に「円グラフ(パイチャート)!」と答えられるほど、円グラフは割合を視覚的に表現するための最も一般的な手法のひとつです。 この記事では、PythonのMatplotlibを使って基本的な円グラフを描く方法から、explodeパラメータで特定のセクターを強調表示するテクニック、さらにパーセンテージではなく実際の値をラベルとして表示するカスタム関数の実装まで、段階的に解説します。 基本的な円グラフの作成手順 ステップ1:Matplotlibのインストール まず、以下のコマンドでMatplotlibを