2015-04-16 4 views
13

Ich bin neu in Matplotlib (1.3.1-2) und ich kann keinen guten Startpunkt finden. Ich möchte die Verteilung der Punkte über die Zeit in einem Histogramm mit Matplotlib plotten.Histogramm in Matplotlib, Zeit auf der x-Achse

Grundsätzlich möchte ich die kumulative Summe des Auftretens eines Datums plotten.

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

Das

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

Da gibt es viele Punkte über viele Jahre sein würde, möchte ich die start date auf einstellen meine x-Axis und die end date und dann markieren n-time steps (dh 1 Jahr Stufen) und schließlich entscheiden, wie viele bins wird es sein.

Wie würde ich das erreichen?

+0

In welchem ​​Format liegen Ihre Daten? 'datetime' Objekte? – hitzg

+0

@hitzg Unix-Timecode. aber ich kann in "datetime" umformatieren – Stophface

Antwort

24

Matplotlib verwendet ein eigenes Format für Datum/Uhrzeit, bietet aber auch einfache Konvertierungsfunktionen, die im Modul bereitgestellt werden. Es bietet auch verschiedene Locators und Formatters, die darauf achten, die Ticks auf der Achse zu platzieren und die entsprechenden Etiketten zu formatieren. Dies sollte Ihnen den Einstieg:

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() 

Ergebnis:

enter image description here

+0

genial. genau das was ich gesucht habe. Vielen Dank! – Stophface

7

Um zu hitzg Antwort hinzufügen, können Sie AutoDateLocator und AutoDateFormatter verwenden können, haben matplotlib die Lage zu tun und die Formatierung für Sie:

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

enter image description here