Précision des dates et epochs dans Matplotlib

PythonPythonBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ceci est un laboratoire étape par étape qui démontre comment gérer la précision des dates et les époques dans Matplotlib. Matplotlib peut travailler avec des objets .datetime et des objets numpy.datetime64 en utilisant un convertisseur d'unités qui reconnaît ces dates et les convertit en nombres à virgule flottante. Avant Matplotlib 3.3, la valeur par défaut de cette conversion renvoyait un nombre à virgule flottante correspondant au nombre de jours depuis "0000-12-31T00:00:00". Depuis Matplotlib 3.3, la valeur par défaut est le nombre de jours depuis "1970-01-01T00:00:00". Cela permet une plus grande résolution pour les dates modernes.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook se charge complètement. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importez les packages nécessaires

La première étape consiste à importer les packages nécessaires, notamment datetime, matplotlib.pyplot et numpy.

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

Fixez l'époque à la valeur par défaut ancienne

L'étape suivante consiste à fixer l'époque à la valeur par défaut ancienne, qui est le nombre de jours depuis "0000-12-31T00:00:00". Cela se fait en utilisant la méthode mdates.set_epoch.

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

Convertissez une date et heure au format Matplotlib

Maintenant que l'époque a été définie, nous pouvons convertir un objet datetime en une date Matplotlib en utilisant la fonction mdates.date2num.

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

Faites un aller-retour avec la date

Nous pouvons ensuite effectuer un aller-retour avec la date en utilisant la fonction mdates.num2date pour vous assurer que la conversion est précise.

date2 = mdates.num2date(mdate1)

Fixez l'époque à la nouvelle valeur par défaut

Pour utiliser des dates modernes avec une précision de microsecondes, nous devons fixer l'époque à la nouvelle valeur par défaut, qui est le nombre de jours depuis "1970-01-01T00:00:00".

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

Convertissez une date et heure au format Matplotlib avec la nouvelle époque

Maintenant que l'époque a été définie à la nouvelle valeur par défaut, nous pouvons convertir un objet datetime en une date Matplotlib en utilisant la fonction mdates.date2num.

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

Faites un aller-retour avec la date avec la nouvelle époque

Nous pouvons ensuite effectuer un aller-retour avec la date en utilisant la fonction mdates.num2date pour vous assurer que la conversion est précise.

date2 = mdates.num2date(mdate1)

Convertissez numpy.datetime64 en date Matplotlib

Les objets numpy.datetime64 ont une précision de microseconde pour un espace temporel beaucoup plus large que les objets .datetime. Cependant, actuellement, le temps Matplotlib n'est converti que de nouveau en objets datetime, qui ont une résolution de microseconde et des années qui ne s'étendent que de 0000 à 9999.

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

Traçage

Cette étape montre comment l'époque affecte le traçage. Avec l'ancienne époque par défaut, les dates étaient arrondies lors de la conversion interne date2num, ce qui entraînait des sauts dans les données.

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

Pour les dates tracées avec l'époque plus récente, le tracé est régulier :

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

Sommaire

Ce laboratoire montre comment gérer la précision des dates et les epochs dans Matplotlib. Nous pouvons définir l'époque à la valeur par défaut ancienne ou nouvelle en utilisant la méthode mdates.set_epoch. Nous pouvons ensuite convertir des objets datetime ou numpy.datetime64 en dates Matplotlib en utilisant la fonction mdates.date2num, et effectuer un aller-retour avec les dates en utilisant la fonction mdates.num2date pour vous assurer que la conversion est précise. Nous pouvons également tracer des données avec différentes epochs pour observer les différences dans le tracé.