Es ist möglich, plt.plot(dates,values)
aufzurufen, wobei dates
eine Liste von datetime.datetime
Objekten ist. Das Diagramm enthält Xticks in einem Format wie '%Y-%m-%d'
. Wenn Sie hineinzoomen, wird automatisch ein Diagramm angezeigt, das Stunden, Minuten und Sekunden anzeigt.
Es klingt jedoch, als ob Sie mehr Kontrolle wünschen als dies. Vielleicht zeigt es nicht die Stunden, Minuten, Sekunden auf der Skala, die Sie wünschen.
In diesem Fall können Sie Ihr eigenes Datum Formatter einrichten:
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
Leider, wenn Sie datetime.datetime
Objekte plt.plot
, die xticks automatisch ausgewählt von matplotlib passieren scheint immer Sekunden gleich Null zu haben. Wenn Sie zum Beispiel, führen
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(dates,values)
plt.show()
dann erhalten Sie schön formatierte Daten, aber alle Xtick Sekunden sind Null.
Also, was ist die Lösung?
Wenn Sie Ihre Zeitstempel -> datetime.datetime Objekte -> matplotlib dateinamen selbst konvertieren und die Datennummern an plt.plot
übergeben, werden die Sekunden beibehalten.
PS. Mit "matplotlib datenum" meine ich die Art von Nummer, die von matplotlib.dates.date2num
zurückgegeben wird.
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
datenums=md.date2num(dates)
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(datenums,values)
plt.show()
Matplotlib sicherlich die Zeitinformation _doesn't_ zu entfernen, wenn Datetimes Plotten ... Was genau machst du da? Möchten Sie nur die Beschriftung der Achse ändern? Wünschen Sie nur einen Tick/Label pro geplottetem Datenpunkt? –