2014-08-27 3 views
6

Meine python Plotdaten zeigen nur 2 Punkte auf der x-Achse.Tick Frequenz auf X (Zeit, nicht Nummer) Frequenz in Matplotlib ändern

Ich hätte gerne mehr, weiß aber nicht wie.

x = [ datetime.datetime(1900,1,1,0,1,2), 
     datetime.datetime(1900,1,1,0,1,3), 
     ... 
     ]           # (more than 1000 elements) 
y = [ 34, 33, 23, ............ ] 

plt.plot(x, y) 

Die X-Achse zeigt nur 2 Intervallpunkte. Ich habe versucht, .xticks zu verwenden, aber arbeitete nicht für X-Achse. Es gab den folgenden Fehler:

TypeError: object of type 'datetime.datetime' has no len() 
+0

Welche Version von MPL verwenden Sie? – tacaswell

+0

und ich verstehe deine Frage wirklich nicht. – tacaswell

+0

Sind Sie sicher, dass nur 2 Punkte angezeigt werden? Sie können dies tun, um zu sehen, was das Diagramm für Daten annimmt: plt.gca() .lines [0] .get_data() Ist es möglich, dass die Punkte einfach zu nahe beieinander liegen? – Lukeclh

Antwort

-1
plt.plot(matplotlib.dates.date2num(x), y) # matplotlib needs float-s, not <datetime.datetime> instances 
+0

mpl wird gegen 'datetime' Objekte geplottet. – tacaswell

11

Welchen Grund es ist, Sie werden immer 2 Ticks standardmäßig nur, man kann es beheben (es anpassen) durch den Ticker-Locator Ändern ein Datum Locator verwenden.

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

x = [ datetime.datetime(1900,1,1,0,1,2), 
     datetime.datetime(1900,1,1,0,1,3), 
     ... 
     ]           # (more than 1000 elements) 
y = [ 34, 33, 23, ............ ] 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
plt.plot(x, y) 

ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15)) #to get a tick every 15 minutes 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))  #optional formatting 

Sie haben mehrere Locators (zum Beispiel: DayLocator, WeekdayLocator, MonthLocator usw.):

http://matplotlib.org/api/dates_api.html

Aber vielleicht dieses Beispiel wird dazu beitragen, mehr: über sie in der Dokumentation lesen

http://matplotlib.org/examples/api/date_demo.html