2015-04-16 17 views
13

Sono nuovo di matplotlib (1.3.1-2) e non riesco a trovare un posto decente per iniziare. Voglio tracciare la distribuzione dei punti nel tempo in un istogramma con matplotlib.Istogramma in matplotlib, tempo sull'asse x

Fondamentalmente voglio tracciare la somma cumulativa dell'occorrenza di una data.

date 
2011-12-13 
2011-12-13 
2013-11-01 
2013-11-01 
2013-06-04 
2013-06-04 
2014-01-01 
... 

che renderebbe

2011-12-13 -> 2 times 
2013-11-01 -> 3 times 
2013-06-04 -> 2 times 
2014-01-01 -> once 

Dal momento che ci saranno molti punti nel corso di molti anni, voglio impostare il start date sul mio x-Axis e la end date, e quindi contrassegnare n-time steps (cioè passi di 1 anno) e alla fine decidi quanti saranno bins.

Come ottenerlo?

+0

Quale formato ha i tuoi dati? Oggetti 'datetime'? – hitzg

+0

@hitzg Timecode Unix. ma posso riformattare in 'datetime' – Stophface

risposta

24

Matplotlib utilizza il proprio formato per date/orari, ma fornisce anche semplici funzioni di conversione fornite nel modulo dates. Fornisce inoltre vari Locators e Formatters che si occupano di posizionare i segni di graduazione sull'asse e formattare le etichette corrispondenti. Questo dovrebbe iniziare:

import random 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

# generate some random data (approximately over 5 years) 
data = [float(random.randint(1271517521, 1429197513)) for _ in range(1000)] 

# convert the epoch format to matplotlib date format 
mpl_data = mdates.epoch2num(data) 

# plot it 
fig, ax = plt.subplots(1,1) 
ax.hist(mpl_data, bins=50, color='lightblue') 
ax.xaxis.set_major_locator(mdates.YearLocator()) 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%y')) 
plt.show() 

Risultato:

enter image description here

+0

fantastico. Proprio quello che stavo cercando. Grazie! – Stophface

7

Per aggiungere alla risposta di hitzg, è possibile utilizzare AutoDateLocator e AutoDateFormatter avere matplotlib fare la posizione e la formattazione per voi:

locator = mdates.AutoDateLocator() 
ax.xaxis.set_major_locator(locator) 
ax.xaxis.set_major_formatter(mdates.AutoDateFormatter(locator)) 

enter image description here

Problemi correlati