Matplotlib - 點選事件



一般來說,點選事件是指使用者透過按下並釋放滑鼠按鈕或點選觸控式螢幕裝置與計算機介面互動時發生的事件。此事件作為計算機系統識別和響應使用者輸入的觸發器。

在資料視覺化(例如Matplotlib或其他繪相簿)的上下文中,點選事件可以用來捕捉使用者與繪圖的特定互動,提供動態和互動式的體驗。這可能包括選擇資料點、觸發更新或啟用使用者啟動的操作等任務。

Matplotlib中的點選事件

Matplotlib中,當用戶點選圖形或其中的特定區域時,就會發生點選事件。這些事件與回撥函式相關聯,這些回撥函式在點擊發生時執行。這可以透過使用圖形畫布上的mpl_connect()方法將回調函式連線到button_press_event來實現。

讓我們來看一個演示簡單點選事件如何工作的基本示例。

示例

在這個示例中,點選事件由onclick函式處理,該函式在使用者點選繪圖上的任何位置時將訊息列印到控制檯。圖形包含一個提示使用者點選的文字元素。

import numpy as np
import matplotlib.pyplot as plt

def onclick(event):
   print('The Click Event Triggered!')

fig, ax = plt.subplots(figsize=(7, 4))
ax.text(0.1, 0.5, 'Click me anywhere on this plot!', dict(size=20))
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

輸出

執行上述程式碼後,我們將得到以下輸出:

click_events_ex1
The Click Event Triggered!
The Click Event Triggered!
The Click Event Triggered!
The Click Event Triggered!
The Click Event Triggered!
The Click Event Triggered!

觀看下面的影片,觀察點選事件功能在此處的工作方式。

click_events_ex1 gif

儲存點選事件座標

儲存點選事件座標允許您收集有關使用者在繪圖上互動的資訊,從而方便資料點選擇或分析等任務。

示例

這是一個儲存並列印繪圖上滑鼠點選座標的示例。這演示瞭如何使用點選事件來收集有關使用者在繪圖上互動的資訊。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)

clicked_coords = []

def onclick(event):
   global ix, iy
   ix, iy = event.xdata, event.ydata
   print(f'Clicked at x = {ix}, y = {iy}')

   global clicked_coords
   clicked_coords.append((ix, iy))

   # Disconnect the click event after collecting 5 coordinates
   if len(clicked_coords) == 5:
      fig.canvas.mpl_disconnect(cid)
      print('Reached the maximum clicks...')

cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

輸出

執行上述程式碼後,我們將得到以下輸出:

click_events_ex2
Clicked at x = 0.0743760368663593, y = 0.11428680137603275
Clicked at x = 1.4368755760368663, y = 0.9928568371128363
Clicked at x = 3.130449769585254, y = 0.10714395555703438
Clicked at x = 4.7221548387096774, y = -1.014282838025715
Clicked at x = 6.377528110599078, y = 0.04285834318604875
Reached the maximum clicks...

觀看下面的影片,觀察點選事件功能在此處的工作方式。

click_events_ex2 gif

帶有複選框的點選事件

複選框小部件與點選事件整合,提供了一種動態的方式來控制使用者在繪圖上的互動。透過將複選框與點選事件相結合,您可以啟用或停用某些功能,從而為使用者提供對繪圖的互動式控制。

示例

在這個示例中,使用複選框來控制在觸發點選事件的繪圖上新增文字。

import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
import numpy as np

def onclick(event):
   # Only use events within the axes.
   if not event.inaxes == ax1:
      return

   # Check if Checkbox is "on"
   if check_box.get_status()[0]:
      ix, iy = event.xdata, event.ydata
      coords3.append((ix, iy))

      # write text with coordinats where clicks occur
      if len(coords3) >= 1:
         ax1.annotate(f"* {ix:.1f}, {iy:.1f}", xy=(ix, iy), color="green")
         fig.canvas.draw_idle()

      # Disconnect after 6 clicks
      if len(coords3) >= 6:
         fig.canvas.mpl_disconnect(cid)
         print('Reached the maximum clicks...')
         plt.close(fig)

x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(2*x)

fig, ax1 = plt.subplots(figsize=(7, 4))
ax1.plot(x, y)
ax1.set_title('This is my plot')

ax2 = plt.axes([0.7, 0.05, 0.1, 0.075])
check_box = CheckButtons(ax2, ['On',], [False,], check_props={'color':'red', 'linewidth':1})

coords3 = []
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

輸出

執行上述程式碼後,我們將得到以下輸出:

click_events_ex3
Reached the maximum clicks...

觀看下面的影片,觀察點選事件功能在此處的工作方式。

click_events_ex3 gif
廣告