2013-03-18 15 views
6

Ho un vettore con date (datetime) in python. Come posso tracciare un istogramma con 15 minuti di bin dalle occorrenze su questo vettore?istogramma con intervalli temporali dal vettore datetime

Ecco quello che ho fatto:

StartTime = [] 
for b in myEvents: 
    StartTime.append(b['logDate'].time()) 

Come vedete, ho convertito le date in tempi. (Mi sto myEvents da una query MongoDB)

fig2 = plt.figure() 
ax = fig2.add_subplot(111) 
ax.grid(True,which='both') 
ax.hist(StartTime,100) 

L'errore che ottengo è:

TypeError: can't compare datetime.time to float 

ho capito l'errore, ma non riesco a capire come risolvere il problema.

La ringrazio molto per il vostro aiuto

+0

Devi convertire il tuo 'tempo' in un' float' poiché questa è l'unica cosa che la funzione di istogramma sta capendo. Puoi trovare [questo codice] (http://ubuntuforums.org/showthread.php?t=700216) utile. – Floris

+0

Possibile duplicato: http://stackoverflow.com/questions/8369584/plot-histogram-of-datetime-time-python-matplotlib – askewchan

+1

@askewchan Ho già letto questa domanda, ma non potrei usarlo – otmezger

risposta

3

Se si vuole bin per ora, minuto o secondo, dovrebbe essere molto facile:

ts = np.array([ datetime.time(random.randint(24),*random.randint(60,size=2)) for i in range(100) ]) 
hist([t.hour for t in ts], bins = 24) # to bin by hour 

Inoltre, per quindici cassonetti minuti, ma il il problema qui è ora le unità sono ore decimali:

hist([t.hour + t.minute/60. for t in ts], bins = 24*60/15)