尝试在 Tkinter 中使用来自 Matplotlib 的鼠标事件的日期时间
Attempting to use a Datetime from a mouseevent from Matplotlib within Tkinter
我有一个数据图(使用 matplotlib
和 Tkinter
)并创建了一个函数来响应用户点击图上的一个点。我让程序 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 开始的浮点天数
我有一个数据图(使用 matplotlib
和 Tkinter
)并创建了一个函数来响应用户点击图上的一个点。我让程序 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 开始的浮点天数