Matplotlibでマウスクリック時にポイントの座標を表示する方法
Matplotlibでは、マウスクリックイベントを活用することで、グラフ上の任意のポイントをクリックした際にその座標(x値・y値)を取得して表示できます。本記事では、button_press_eventイベントとmpl_connect()メソッドを組み合わせた具体的な実装方法を、コード例とともにわかりやすく解説します。
実装手順
図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
新しい図を作成するか、既存の図をアクティブにします。
関数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.sin(x)
plt.plot(x, y)
plt.show()
処理のポイント
このコードの核となるのは、fig.canvas.mpl_connect('button_press_event', mouse_event)の部分です。これにより、ユーザーが図上でマウスをクリックするたびに、登録したコールバック関数mouse_eventが自動的に呼び出されます。イベントオブジェクトが持つxdataとydata属性には、クリックされた位置のデータ座標が格納されているため、それをそのまま出力すれば座標を確認できます。
出力結果
このコードを実行すると、以下のような正弦波グラフが表示されます。

グラフ上のさまざまな位置をクリックすると、クリックした各ポイントの座標がコンソールに表示されます。
x: -3.099305446290094 and y: -0.013811108549791173 x: -0.2865652183685867 and y: -0.2067543563498595 x: -3.0280968329249927 and y: -0.1844916739113902 x: -5.7696284474814 and y: 0.4240216460734405 x: -3.9182044999887626 and y: 0.6837529411889172
この手法を応用すれば、クリックした座標をアノテーションとしてグラフ上に描画したり、GUIアプリケーション内でインタラクティブなデータ選択機能を実装したりすることも可能です。データ分析や可視化ツールの開発において非常に便利なテクニックなので、ぜひ活用してみてください。
-
Matplotlibでマウスクリックイベントの座標を取得・保存する方法
Matplotlibでマウスクリック時の座標を記録したい場合は、「button_press_event」イベントを利用するのが最も簡単な方法です。この記事では、実際に動作するサンプルコードとともに、その手順をわかりやすく解説します。 実装の手順 図(figure)のサイズを設定し、サブプロット間および周囲の余白を調整します。 図とサブプロットを作成します。 0〜9の範囲で折れ線グラフを描画します。 onclick 関数を button_press_event イベントにバインドします。 イベントから取得した x 座標と y 座標を出力します。 show() メソッドで図を表示します。 サン
-
matplotlib.pyplot.scatterのデフォルトの青色を取得する方法を解説
matplotlibでscatter()メソッドを使って散布図を描くとき、色を指定しなければ点は自動的に青色(#1f77b4)で描画されます。この記事では、matplotlibのscatterプロットにおけるデフォルトの青色を実際に確認・取得する方法を、コード例とともにわかりやすく解説します。 デフォルトの青色とは matplotlibのデフォルトのカラーサイクル(C0)に含まれる最初の色が#1f77b4であり、これがscatterプロットで色を指定しない場合に使われる青色です。以下のサンプルコードでは、色を指定せずに描いた点と、16進数カラーコード「#1f77b4」を明示的に指定して描いた点