2009-10-15 10 views
88

Ich habe eine Reihe von Zeitmarken in dem Format (HH: MM: SS.mmmmmm) und eine andere Anordnung von Gleitkommazahlen, die jeweils in dem Zeitstempel-Array zu einem Wert entspricht.Zeit in Python mit Matplotlib Plotten

Kann ich Zeit auf der x-Achse plotten und die Zahlen auf der y-Achse mit Matplotlib?

ich versuchte, aber irgendwie war es nur Arrays von Schwimmern zu akzeptieren. Wie kann ich es bekommen, um die Zeit zu planen? Muss ich das Format irgendwie ändern?

Antwort

107

Sie müssen zuerst Ihre Zeitstempel in Python datetime Objekte konvertieren (verwenden Sie). Verwenden Sie dann date2num, um die Daten in das Matplotlib-Format zu konvertieren.

Plot der Daten und Werte mit plot_date:

dates = matplotlib.dates.date2num(list_of_datetimes) 
matplotlib.pyplot.plot_date(dates, values) 
+1

wird es das Datum oder nur die Zeit plotten? Ich will nur die Zeit seit der Umstellung auf Datetime, das Jahr ist auf 1990 gesetzt. – randomThought

+0

"... bei der Umstellung auf Datetime, ist das Jahr auf 1990 eingestellt": Könnten Sie bitte den Code, den Sie verwenden, von String zu Datetime konvertieren ? Etwas könnte mit der Konvertierung falsch sein. Re. Die Formatierung von Diagrammbeschriftungen finden Sie unter dem Link date_demo1 von J. K. Seppänen. Die matplot lib Dokumentation ist ausgezeichnet, BTW. http://matplotlib.sourceforge.net/index.html – codeape

+11

plot_dates -> matplotlib.pyplot.plot_date (Daten, Werte) – Pete

52

Sie können auch die Zeitstempel, Wert-Paare plotten pyplot.plot mit (nach ihnen aus ihrer String-Darstellung Parsing). (Getestet mit matplotlib Versionen 1.2.0 und 1.3.1.)

Beispiel:

import datetime 
import random 
import matplotlib.pyplot as plt 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

plt.show() 

Bild Resultierende:

Line Plot


Hier ist das gleiche wie ein Streudiagramm:

import datetime 
import random 
import matplotlib.pyplot as plt 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.scatter(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

plt.show() 

erzeugt ein Bild, ähnlich wie diese:

Scatter Plot

+2

Wie funktioniert es für Scatter Plot? – andi

+4

@andi sollte es genauso funktionieren wie in meinem Beispiel ("plot" in "scatter" ändern). – moooeeeep

+1

Ich verstehe nicht, warum das ist die fünfte Frage, die ich angetroffen habe, wo niemand wirklich * TRIED * mit einem Streudiagramm verwendet hat - es funktioniert nicht. 'Type Error - ungültiger Typ '. – dwanderson

2

7 Jahre später, und dieser Code hat mir geholfen. Allerdings waren meine Zeiten immer noch nicht korrekt angezeigt.

enter image description here

Mit Matplotlib 2.0.0 und ich hatte die folgende Bit des Codes von Editing the date formatting of x-axis tick labels in matplotlib von Paul H.

import matplotlib.dates as mdates 
myFmt = mdates.DateFormatter('%d') 
ax.xaxis.set_major_formatter(myFmt) 

I das Format geändert hinzuzufügen (% H:% M) und Die Uhrzeit wird korrekt angezeigt. enter image description here

Alles dank an die Gemeinschaft.

1

hatte ich Probleme mit dieser mit matplotlib Version: 2.0.2. Wenn ich das Beispiel von oben durchführte, bekam ich einen zentrierten Stapel von Blasen.wie gewünscht

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


# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot([],[]) 
plt.scatter(x,y) 

# beautify the x-labels 
plt.gcf().autofmt_xdate() 
myFmt = mdates.DateFormatter('%H:%M') 
plt.gca().xaxis.set_major_formatter(myFmt) 

plt.show() 
plt.close() 

Dies erzeugt ein Bild mit den verteilten Blasen:

graph with centered stack of bubbles

I durch Hinzufügen eines weitere Linie des Problems "fixed":

plt.plot([],[]) 

Das gesamte Codefragment wird .

graph with bubbles distributed over time

+0

Vielen Dank für die aktualisierte Version. – Aventinus