matplotlib 曲线上点击鼠标显示标签,同时只显示两个标签
时间: 2023-08-21 09:07:36 浏览: 48
可以使用 matplotlib 的事件处理机制来实现点击曲线后显示标签的功能。具体的实现步骤如下:
1. 定义一个函数,用于处理鼠标点击事件。该函数需要接收一个 event 参数,其中包含了鼠标点击的位置信息。
2. 在函数中,首先获取当前鼠标点击的坐标值,并通过 matplotlib 提供的函数 `ax.lines` 获取当前所有的曲线对象。
3. 遍历所有的曲线对象,计算每个曲线与当前鼠标点击位置的距离,并找到距离最近的两个曲线。
4. 对于距离最近的两个曲线,分别获取它们的 x 坐标和 y 坐标,并将它们作为注释文本显示在当前图形中。
下面是一个示例代码,实现了上述功能:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成两个曲线
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x, y1)
ax.plot(x, y2)
# 定义处理鼠标点击事件的函数
def on_click(event):
# 获取当前鼠标点击的坐标值
x, y = event.xdata, event.ydata
if x is not None and y is not None:
# 获取所有的曲线对象
lines = ax.lines
# 计算每个曲线与当前鼠标点击位置的距离
distances = [(np.abs(line.get_xdata() - x) ** 2 + np.abs(line.get_ydata() - y) ** 2).min() for line in lines]
# 找到距离最近的两个曲线
indices = np.argsort(distances)[:2]
# 对于距离最近的两个曲线,分别获取它们的 x 坐标和 y 坐标,并将它们作为注释文本显示在当前图形中
for i in indices:
x_i, y_i = lines[i].get_xdata(), lines[i].get_ydata()
ax.annotate(f'({x_i[0]:.2f}, {y_i[0]:.2f})', (x_i[0], y_i[0]), xytext=(5, 5), textcoords='offset points')
# 绑定鼠标点击事件处理函数
cid = fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()
```
在运行上述代码后,可以看到一个包含两条曲线的图形界面。当鼠标点击曲线上的某个点时,会在该点附近显示最近的两个曲线的 x 坐标和 y 坐标。如果需要修改显示的标签内容或位置,可以根据实际需求调整代码中的注释文本内容和坐标位置。