Matplotlib-Datengenauigkeit und Epochen

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dies ist ein schrittweise Tutorial, das zeigt, wie man Datumsgenauigkeit und Epochen in Matplotlib behandelt. Matplotlib kann mit .datetime-Objekten und numpy.datetime64-Objekten arbeiten, indem es einen Einheitenkonverter verwendet, der diese Daten erkennt und in Gleitkommazahlen umwandelt. Vor Matplotlib 3.3 war die Standardeinstellung für diese Umwandlung ein Float, der die Anzahl der Tage seit "0000-12-31T00:00:00" angab. Ab Matplotlib 3.3 ist die Standardeinstellung die Anzahl der Tage seit "1970-01-01T00:00:00". Dies ermöglicht eine höhere Auflösung für moderne Daten.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Pakete

Der erste Schritt besteht darin, die erforderlichen Pakete zu importieren, einschließlich datetime, matplotlib.pyplot und numpy.

import datetime
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates

Setzen der Epoche auf die alte Standardeinstellung

Der nächste Schritt besteht darin, die Epoche auf die alte Standardeinstellung zu setzen, die die Anzahl der Tage seit "0000-12-31T00:00:00" angibt. Dies wird mit der Methode mdates.set_epoch durchgeführt.

mdates.set_epoch('0000-12-31T00:00:00')

Konvertieren von datetime in Matplotlib-Datum

Jetzt, nachdem die Epoche festgelegt wurde, können wir ein datetime-Objekt in ein Matplotlib-Datum mit der Funktion mdates.date2num umwandeln.

date1 = datetime.datetime(2000, 1, 1, 0, 10, 0, 12, tzinfo=datetime.timezone.utc)
mdate1 = mdates.date2num(date1)

Umkehrung des Datums

Wir können dann das Datum in die ursprüngliche Richtung zurückverfolgen, indem wir die Funktion mdates.num2date verwenden, um sicherzustellen, dass die Umwandlung korrekt ist.

date2 = mdates.num2date(mdate1)

Setzen der Epoche auf die neue Standardeinstellung

Um moderne Datumswerte mit Mikrosekundengenauigkeit zu verwenden, müssen wir die Epoche auf die neue Standardeinstellung setzen, die die Anzahl der Tage seit "1970-01-01T00:00:00" angibt.

mdates.set_epoch('1970-01-01T00:00:00')

Konvertieren von datetime in Matplotlib-Datum mit neuer Epoche

Jetzt, nachdem die Epoche auf die neue Standardeinstellung gesetzt wurde, können wir ein datetime-Objekt in ein Matplotlib-Datum mit der Funktion mdates.date2num umwandeln.

date1 = datetime.datetime(2020, 1, 1, 0, 10, 0, 12, tzinfo=datetime.timezone.utc)
mdate1 = mdates.date2num(date1)

Umkehrung des Datums mit neuer Epoche

Wir können dann das Datum in die ursprüngliche Richtung zurückverfolgen, indem wir die Funktion mdates.num2date verwenden, um sicherzustellen, dass die Umwandlung korrekt ist.

date2 = mdates.num2date(mdate1)

Konvertieren von numpy.datetime64 in Matplotlib-Datum

numpy.datetime64-Objekte haben eine Mikrosekundengenauigkeit für einen viel größeren Zeitraum als .datetime-Objekte. Allerdings wird derzeit die Matplotlib-Zeit nur in datetime-Objekte zurückkonvertiert, die eine Mikrosekundenauflösung haben und Jahre, die nur von 0000 bis 9999 reichen.

date1 = np.datetime64('2000-01-01T00:10:00.000012')
mdate1 = mdates.date2num(date1)

Plotten

Dieser Schritt zeigt, wie die Epoche das Plotten beeinflusst. Mit der alten Standardeinstellung der Epoche wurden die Zeiten während der internen date2num-Konvertierung aufgerundet, was zu Sprüngen in den Daten führte.

mdates.set_epoch('0000-12-31T00:00:00')

x = np.arange('2000-01-01T00:00:00.0', '2000-01-01T00:00:00.000100', dtype='datetime64[us]')
xold = np.array([mdates.num2date(mdates.date2num(d)) for d in x])
y = np.arange(0, len(x))

fig, ax = plt.subplots(layout='constrained')
ax.plot(xold, y)
ax.set_title('Epoch: ' + mdates.get_epoch())
ax.xaxis.set_tick_params(rotation=40)
plt.show()

Für Daten, die mit der neueren Epoche geplottet werden, ist der Plot glatt:

mdates.set_epoch('1970-01-01T00:00:00')

fig, ax = plt.subplots(layout='constrained')
ax.plot(x, y)
ax.set_title('Epoch: ' + mdates.get_epoch())
ax.xaxis.set_tick_params(rotation=40)
plt.show()

Zusammenfassung

Dieses Lab zeigt, wie man Datengenauigkeit und Epochen in Matplotlib behandelt. Wir können die Epoche auf die alte Standardeinstellung oder die neue Standardeinstellung mit der Methode mdates.set_epoch setzen. Anschließend können wir datetime- oder numpy.datetime64-Objekte in Matplotlib-Daten mit der Funktion mdates.date2num umwandeln und die Daten in die ursprüngliche Richtung zurückverfolgen, indem wir die Funktion mdates.num2date verwenden, um sicherzustellen, dass die Umwandlung korrekt ist. Wir können auch Daten mit verschiedenen Epochen plotten, um die Unterschiede im Plot zu beobachten.