Matplotlib 简明教程

Matplotlib - Click Events

一般来说,每当用户按下并松开鼠标按钮或点击触摸屏设备时,就会发生 click event 。此事件作为触发器,供计算机系统识别和响应用户的输入。

在数据可视化中,例如在 Matplotlib 或其他绘图库中,单击事件可用于捕获用户与绘图的特定交互,从而提供动态的互动体验。这可能包括选择数据点、触发更新或启用用户启动的操作等任务。

Click Events in Matplotlib

Matplotlib 中,当用户通过点击图片或其内部的特定区域与绘图交互时,就会发生点击事件。这些事件与回调函数关联,该函数在点击发生时执行。可以通过使用 mpl_connect() 方法将回调函数连接到 button_press_event 来完成此操作。

让我们看一个演示简单单击事件如何工作的基本示例。

Example

此示例中,点击事件由 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

Storing Click Event Coordinates

存储点击事件坐标允许您收集有关用户在绘图上交互的信息,便于执行诸如数据点选择或分析之类的任务。

Example

以下示例存储并打印了鼠标在绘图上点击的坐标。这演示了如何使用点击事件来收集有关用户在绘图上交互的信息。

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

Click Event with Checkbox

checkbox 窗口小部件与 click events 集成提供了一种控制绘图上用户交互的动态方式。通过将复选框与点击事件相结合,您可以启用或禁用某些功能,从而使用户可以交互控制绘图。

Example

此示例中,使用复选框来控制在触发的点击事件上向绘图添加文本。

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