2015-11-17 2 views
1

У меня есть график данных (с использованием matplotlib и Tkinter) и создал funtion, который отвечает пользователю, нажимая на точку на графике. Я получил программу, чтобы вернуть правильное значение y (потому что это просто тип float). Однако моя ось x имеет данные типа datetime, и когда я прошу распечатать значение x, он печатает тип numpy.float64. Я ищу использовать значение datetime, которое пользователь выбирает, но мне нужно сначала получить к нему доступ.Попытка использовать Datetime из мыши из Matplotlib в Tkinter

Одним из примеров х возвращаемого значения: 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 

ответ

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