如何在Matplotlib绘图的button_press_event中避免插值,获取最近x轴数据点?
获取点击位置对应的原始横轴整数数据点
要解决这个问题,核心是利用你原始的int64类型横轴numpy数组,找到与点击位置最接近的那个数据点,完全绕开event.xdata的插值结果。具体实现步骤如下:
- 确保点击事件处理函数
on_click能访问到你的原始横轴数组(比如设为全局变量,或者通过闭包、类属性传递)。 - 在
on_click中,计算点击位置与横轴每个数据点的绝对差值,找到差值最小的那个点的索引,再取出对应的原始横轴值。
示例代码如下:
import numpy as np import matplotlib.pyplot as plt # 假设这是你的原始横轴int64数组 x = np.array([10, 20, 30, 40, 50], dtype=np.int64) y = np.random.randint(0, 100, size=len(x)) plt.plot(x, y, marker='o') # 绘图,标记出原始数据点 def on_click(event): # 排除点击在绘图区域外的情况 if event.xdata is None: return cursor_x = event.xdata # 计算每个横轴点与点击位置的绝对差,找到最小差值的索引 closest_idx = np.argmin(np.abs(x - cursor_x)) # 获取对应的原始横轴整数点 closest_x = x[closest_idx] # 这里可以添加你的后续处理逻辑 print(f"点击位置对应的最近横轴数据点:{closest_x}") # 绑定点击事件 plt.connect("button_press_event", on_click) plt.show()
这段代码里,np.argmin(np.abs(x - cursor_x))会直接定位到离点击位置最近的原始横轴数据点索引,取出的closest_x就是你需要的int64类型原始值,完全不会用到插值后的非整数结果。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

