尝试在 Tkinter 中使用来自 Matplotlib 的鼠标事件的日期时间

Attempting to use a Datetime from a mouseevent from Matplotlib within Tkinter

我有一个数据图(使用 matplotlibTkinter)并创建了一个函数来响应用户点击图上的一个点。我让程序 return 正确的 y 值(因为它只是一个 float 类型)。但是,我的 x 轴有 datetime 类型的数据,当我要求它打印 x 值时,它打印了 numpy.float64 类型。我希望使用用户选择的日期时间值,但我需要先访问它。

x 值的一个示例 returned:735764.731698

下面是处理onpick事件的函数。

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

def onpick(self,event):    

      im=Image.open('C:\Carbonite\EL_36604.02_231694\EL_36604.02_231694_2015-06-15 10.39.57.jpeg')
        im.show()

        x = event.mouseevent.xdata
        y = event.mouseevent.ydata
        x1 = event.mouseevent.x
        y1 = event.mouseevent.y

        dataind = event.ind[0]

        print type(x),x,y,x1,y1, len(event.ind)      

        return True


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

下面是选择一个点时的输出示例:

%run "C:\Carbonite\Main_interface_file.py"
<type 'numpy.float64'> 735764.732134 1.93689320388 499 242.0 1

mpl 在内部转换日期 -> 浮点数(它知道如何绘制)并转换回日期时间以标记轴。这里你需要的函数是num2date

import matplotlib.dates as mdate
dt = mdate.num2date(num)

In [222]:  mdate.num2date(735764.732134).isoformat()
Out[222]: '2015-06-15T17:34:16.377604+00:00'

另请注意,mpl 在内部使用的浮点表示是从 0001-01-01 开始的浮点天数