Introduction
Le ~.dates.ConciseDateFormatter est un outil pratique pour formater les étiquettes de date sur les graduations lorsqu'on travaille avec Matplotlib. Dans ce laboratoire, vous allez apprendre à utiliser ce formateur pour améliorer les chaînes choisies pour les étiquettes de graduation et pour réduire au minimum le nombre de caractères utilisés dans ces étiquettes.
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 d'adresses pour accéder à Jupyter Notebook et pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de 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.
Formateur par défaut
Nous commençons par examiner le formateur par défaut et sa sortie verbeuse. Nous traçons des données en fonction du temps et observons comment le formateur par défaut affiche la date et l'heure.
import datetime
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
## créer des données temporelles
base = datetime.datetime(2005, 2, 1)
dates = [base + datetime.timedelta(hours=(2 * i)) for i in range(732)]
N = len(dates)
np.random.seed(19680801)
y = np.cumsum(np.random.randn(N))
## tracer les données
fig, axs = plt.subplots(3, 1, layout='constrained', figsize=(6, 6))
lims = [(np.datetime64('2005-02'), np.datetime64('2005-04')),
(np.datetime64('2005-02-03'), np.datetime64('2005-02-15')),
(np.datetime64('2005-02-03 11:00'), np.datetime64('2005-02-04 13:20'))]
for nn, ax in enumerate(axs):
ax.plot(dates, y)
ax.set_xlim(lims[nn])
## rotation des étiquettes...
for label in ax.get_xticklabels():
label.set_rotation(40)
label.set_horizontalalignment('right')
axs[0].set_title('Formateur de date par défaut')
plt.show()
Formateur de date concise
Ensuite, nous explorons le ~.dates.ConciseDateFormatter et sa sortie. Nous créons un nouveau tracé avec le formateur de date concise et observons comment il diffère du formateur par défaut.
fig, axs = plt.subplots(3, 1, layout='constrained', figsize=(6, 6))
for nn, ax in enumerate(axs):
locator = mdates.AutoDateLocator(minticks=3, maxticks=7)
formatter = mdates.ConciseDateFormatter(locator)
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)
ax.plot(dates, y)
ax.set_xlim(lims[nn])
axs[0].set_title('Formateur de date concise')
plt.show()
Enregistrement d'un convertisseur
Si tous les appels à des axes qui ont des dates doivent être effectués en utilisant ce convertisseur, il est probablement le plus pratique d'utiliser le registre d'unités. Nous enregistrons un convertisseur avec le registre d'unités et traçons des données en utilisant le formateur de date concise.
import datetime
import matplotlib.units as munits
converter = mdates.ConciseDateConverter()
munits.registry[np.datetime64] = converter
munits.registry[datetime.date] = converter
munits.registry[datetime.datetime] = converter
fig, axs = plt.subplots(3, 1, figsize=(6, 6), layout='constrained')
for nn, ax in enumerate(axs):
ax.plot(dates, y)
ax.set_xlim(lims[nn])
axs[0].set_title('Formateur de date concise')
plt.show()
Localisation des formats de date
Les formats de date peuvent être localisés si les formats par défaut ne sont pas souhaitables en manipulant l'une des trois listes de chaînes de caractères. Nous modifions les étiquettes pour qu'elles soient au format "jour mois année", au lieu du format ISO "année mois jour".
fig, axs = plt.subplots(3, 1, layout='constrained', figsize=(6, 6))
for nn, ax in enumerate(axs):
locator = mdates.AutoDateLocator()
formatter = mdates.ConciseDateFormatter(locator)
formatter.formats = ['%y', ## les graduations sont principalement en années
'%b', ## les graduations sont principalement en mois
'%d', ## les graduations sont principalement en jours
'%H:%M', ## heures
'%H:%M', ## minutes
'%S.%f', ] ## secondes
## ces formats sont principalement ceux du niveau au-dessus...
formatter.zero_formats = [''] + formatter.formats[:-1]
#...sauf pour les graduations qui sont principalement en heures, dans ce cas, il est agréable d'avoir
## le format jour-mois :
formatter.zero_formats[3] = '%d-%b'
formatter.offset_formats = ['',
'%Y',
'%b %Y',
'%d %b %Y',
'%d %b %Y',
'%d %b %Y %H:%M', ]
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)
ax.plot(dates, y)
ax.set_xlim(lims[nn])
axs[0].set_title('Formateur de date concise')
plt.show()
Enregistrement d'un convertisseur avec localisation
Nous pouvons également enregistrer un convertisseur avec localisation en passant des arguments clés à ~.dates.ConciseDateConverter et en enregistrant les types de données que vous utiliserez avec le registre d'unités.
import datetime
formats = ['%y', ## les graduations sont principalement en années
'%b', ## les graduations sont principalement en mois
'%d', ## les graduations sont principalement en jours
'%H:%M', ## heures
'%H:%M', ## minutes
'%S.%f', ] ## secondes
## ceux-ci peuvent être les mêmes, sauf décalés d'un niveau....
zero_formats = [''] + formats[:-1]
#...sauf pour les graduations qui sont principalement en heures, dans ce cas, il est agréable d'avoir le format jour-mois
zero_formats[3] = '%d-%b'
offset_formats = ['',
'%Y',
'%b %Y',
'%d %b %Y',
'%d %b %Y',
'%d %b %Y %H:%M', ]
converter = mdates.ConciseDateConverter(
formats=formats, zero_formats=zero_formats, offset_formats=offset_formats)
munits.registry[np.datetime64] = converter
munits.registry[datetime.date] = converter
munits.registry[datetime.datetime] = converter
fig, axs = plt.subplots(3, 1, layout='constrained', figsize=(6, 6))
for nn, ax in enumerate(axs):
ax.plot(dates, y)
ax.set_xlim(lims[nn])
axs[0].set_title('Formateur de date concise enregistré avec un format non par défaut')
plt.show()
Sommaire
Dans ce laboratoire, vous avez appris à utiliser le ~.dates.ConciseDateFormatter pour formater les graduations de date lors de l'utilisation de Matplotlib. Vous avez également appris à localiser les formats de date et à enregistrer des convertisseurs pour rendre le processus plus pratique.