Python 需要使用mouseevent在matplotlib上的Tkinter中显示的数据集值

Python 需要使用mouseevent在matplotlib上的Tkinter中显示的数据集值,python,matplotlib,tkinter,mouseevent,Python,Matplotlib,Tkinter,Mouseevent,我正在使用mouseevent获取x轴值(采用datetime格式)。但是,当我得到值时,它是用户单击的确切位置,而不是距离最近点的x轴值 e、 g.在11/15/2014 17:15:30有一点。用户在11/15/2014 17:15:27.543928+00:00上尽可能近距离单击。我需要程序来实现它想要最近的点,这样我可以在以后索引那个精确的值。我正在寻找最快/最有效的选项——我不想在整个列表中循环寻找最接近的匹配项,但这是我目前看到的唯一解决方案。最理想的情况是,当用户单击时,它会简单地

我正在使用
mouseevent
获取x轴值(采用
datetime
格式)。但是,当我得到值时,它是用户单击的确切位置,而不是距离最近点的x轴值

e、 g.在
11/15/2014 17:15:30
有一点。用户在
11/15/2014 17:15:27.543928+00:00
上尽可能近距离单击。我需要程序来实现它想要最近的点,这样我可以在以后索引那个精确的值。我正在寻找最快/最有效的选项——我不想在整个列表中循环寻找最接近的匹配项,但这是我目前看到的唯一解决方案。最理想的情况是,当用户单击时,它会简单地报告最近点的x值

我已经添加了下面我将要介绍的代码部分。我还添加了我实际绘制数据的部分(显然所有这些都在一个类中)

#Importing modules
import matplotlib.pyplot as plt
from Tkinter import *
from PIL import ImageTk, Image
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
from images_to_list import images_to_list
from tkFileDialog import askopenfilename, askdirectory
import matplotlib.dates as mdates

class App:
    def __init__(self, master):
        self.line,=self.ax.plot(tft[self.event_num],tf1[self.event_num],'.',picker=5) #Plotting the voltage data from mat 1
        self.line2, = self.ax.plot(tft[self.event_num],tf2[self.event_num],'.',picker=5)

    def onpick(self,event):        
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata
        self.actual = mdates.num2date(x) #because x is in numpy.float64
        print self.actual
        #self.image_ind = tft.index(self.actual)
        #self.image_scroll.set(self.image_ind)
        dataind = event.ind[0]    

#Action Creating the UI and running the program
app = App(extra)
app.canvas.mpl_connect('pick_event', app.onpick)
extra.mainloop()

如果对x数据进行了排序,则可以使用二进制搜索来查找最接近的数据,并可以在更高的维度中使用
kdtree
。我对python相当陌生--您能在回答部分留下一个如何执行此操作的示例吗?