2013-07-17 20 views
6

Desidero stampare alcuni timestamp (formato Anno-mese-giorno Ora-Minuto-Secondo). Sto usando il seguente codice, tuttavia non mostra alcuna informazione di minuti al minuto, li mostra come 00-00-00. Ho ricontrollato il mio array di date e, come puoi vedere dallo snippet qui sotto, non sono zero.Data e ora di tracciamento (ora/minuto/secondi) con Matplotlib

Hai qualche idea sul motivo per cui sto ricevendo 00-00-00? enter image description here

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import dateutil 

dates = [dateutil.parser.parse(s) for s in datestrings] 
# datestrings = ['2012-02-21 11:28:17.980000', '2012-02-21 12:15:32.453000', '2012-02-21 23:26:23.734000', '2012-02-26 17:42:15.804000'] 
plt.subplots_adjust(bottom=0.2) 
plt.xticks(rotation= 80) 
ax=plt.gca() 
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S') 
ax.xaxis.set_major_formatter(xfmt) 
plt.plot(dates[0:10],plt_data[0:10], "o-") 
plt.show() 

risposta

7

Prova lo zoom sul grafico, potrete vedere le datetimes espandono come i vostri x scala cambia asse.

plotting unix timestamps in matplotlib

Ho avuto un problema simile fastidioso quando si cerca di tracciare mappe termiche di selezione positiva sui cromosomi. Se zoomassi troppo lontano le cose scomparirebbero del tutto!

modifica: questo codice traccia le date esattamente come le date, ma non aggiunge zecche intermedie.

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import dateutil 

datestrings = ['2012-02-21 11:28:17.980000', '2012-02-21 12:15:32.453000', '2012-02-21 23:26:23.734000', '2012-02-26 17:42:15.804000'] 
dates = [dateutil.parser.parse(s) for s in datestrings] 

plt_data = range(5,9) 
plt.subplots_adjust(bottom=0.2) 
plt.xticks(rotation=25) 

ax=plt.gca() 
ax.set_xticks(dates) 

xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S') 
ax.xaxis.set_major_formatter(xfmt) 
plt.plot(dates,plt_data, "o-") 
plt.show() 
+0

Grazie per la risposta. Ho già visto "tracciare timestamp unix in matplotlib". Tuttavia, il mio problema è, Matplotlib non mostra i minuti di ore come mostra la domanda "tracciare timestamp unix in matplotlib". Nel mio caso li mostra semplicemente come 00-00-00 e non riesco a capire perché (perché sembra che i miei timestamp siano corretti) .. – user1048858

+0

Hai ragione, è perché sta cercando di riempire l'asse x con le zecche , vedi la mia risposta modificata. – seth

0

Posso dirti perché mostra 00:00:00. È perché è l'ora di inizio di quel particolare giorno. Ad esempio, un segno di spunta è 2012-02-22 00:00:00 (12 mezzanotte del 2012-02-22) e un altro è 2012-02-23 00:00:00 (12 mezzanotte del 2012-02-23).

Le zecche per i timestamp tra queste due volte non sono visualizzate.

Io stesso sto cercando di capire come mostrare le zecche tra questi tempi.