Precisión de fechas y épocas en Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este es un laboratorio paso a paso que demuestra cómo manejar la precisión de fechas y los épocas en Matplotlib. Matplotlib puede trabajar con objetos .datetime y objetos numpy.datetime64 utilizando un conversor de unidades que reconoce estas fechas y las convierte en números de punto flotante. Antes de Matplotlib 3.3, el valor predeterminado para esta conversión devolvía un flotante que era el número de días desde "0000-12-31T00:00:00". A partir de Matplotlib 3.3, el valor predeterminado es el número de días a partir de "1970-01-01T00:00:00". Esto permite una mayor resolución para fechas modernas.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar los paquetes necesarios

El primer paso es importar los paquetes necesarios, incluyendo datetime, matplotlib.pyplot y numpy.

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

Establecer la época al valor predeterminado antiguo

El siguiente paso es establecer la época al valor predeterminado antiguo, que es el número de días desde "0000-12-31T00:00:00". Esto se hace utilizando el método mdates.set_epoch.

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

Convertir datetime a fecha de Matplotlib

Ahora que se ha establecido la época, podemos convertir un objeto datetime a una fecha de Matplotlib utilizando la función mdates.date2num.

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

Dar la vuelta a la fecha

Luego podemos dar la vuelta a la fecha utilizando la función mdates.num2date para asegurarnos de que la conversión sea exacta.

date2 = mdates.num2date(mdate1)

Establecer la época al nuevo valor predeterminado

Para utilizar fechas modernas con precisión a microsegundos, necesitamos establecer la época al nuevo valor predeterminado, que es el número de días desde "1970-01-01T00:00:00".

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

Convertir datetime a fecha de Matplotlib con la nueva época

Ahora que se ha establecido la época al nuevo valor predeterminado, podemos convertir un objeto datetime a una fecha de Matplotlib utilizando la función mdates.date2num.

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

Dar la vuelta a la fecha con la nueva época

Luego podemos dar la vuelta a la fecha utilizando la función mdates.num2date para asegurarnos de que la conversión sea exacta.

date2 = mdates.num2date(mdate1)

Convertir numpy.datetime64 a fecha de Matplotlib

Los objetos numpy.datetime64 tienen una precisión de microsegundos para un espacio de tiempo mucho más amplio que los objetos .datetime. Sin embargo, actualmente, la hora de Matplotlib solo se convierte de vuelta a objetos datetime, que tienen una resolución de microsegundos y años que solo abarcan desde 0000 hasta 9999.

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

Graficación

Este paso demuestra cómo la época afecta la graficación. Con la época predeterminada antigua, las fechas se redondeaban durante la conversión interna date2num, lo que llevaba a saltos en los datos.

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

Para las fechas graficadas utilizando la época más reciente, la gráfica es suave:

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

Resumen

Esta práctica demuestra cómo manejar la precisión de fechas y las épocas en Matplotlib. Podemos establecer la época al valor predeterminado antiguo o al nuevo valor predeterminado utilizando el método mdates.set_epoch. Luego, podemos convertir objetos datetime o numpy.datetime64 a fechas de Matplotlib utilizando la función mdates.date2num, y dar la vuelta a las fechas utilizando la función mdates.num2date para asegurarnos de que la conversión sea exacta. También podemos graficar datos con diferentes épocas para observar las diferencias en la gráfica.