Nota
Haga clic aquí para descargar el código de ejemplo completo
Etiquetas de marca de fecha #
El trazado de fechas de Matplotlib se realiza convirtiendo las instancias de fecha en días desde una época (por defecto, 1970-01-01T00:00:00). El
matplotlib.dates
módulo proporciona las funciones de conversión date2num
y num2date
que convierte datetime.datetime
y numpy.datetime64
objetos hacia y desde la representación interna de Matplotlib. Estos tipos de datos se registran con el mecanismo de conversión de unidades descrito en
matplotlib.units
, por lo que la conversión se realiza automáticamente para el usuario. El proceso de registro también establece la marca predeterminada locator
y
formatter
para que el eje sea AutoDateLocator
y
AutoDateFormatter
.
Un formateador alternativo es el ConciseDateFormatter
, que se usa en el segundo a Axes
continuación (consulte
Formatear marcas de fecha usando ConciseDateFormatter ), que a menudo elimina la necesidad de rotar las etiquetas de marcas. El último Axes
formatea las fechas manualmente, usando
DateFormatter
para formatear las fechas usando las cadenas de formato documentadas en datetime.date.strftime
.
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.cbook as cbook
# Load a numpy record array from yahoo csv data with fields date, open, high,
# low, close, volume, adj_close from the mpl-data/sample_data directory. The
# record array stores the date as an np.datetime64 with a day unit ('D') in
# the date column.
data = cbook.get_sample_data('goog.npz', np_load=True)['price_data']
fig, axs = plt.subplots(3, 1, figsize=(6.4, 7), constrained_layout=True)
# common to all three:
for ax in axs:
ax.plot('date', 'adj_close', data=data)
# Major ticks every half year, minor ticks every month,
ax.xaxis.set_major_locator(mdates.MonthLocator(bymonth=(1, 7)))
ax.xaxis.set_minor_locator(mdates.MonthLocator())
ax.grid(True)
ax.set_ylabel(r'Price [\$]')
# different formats:
ax = axs[0]
ax.set_title('DefaultFormatter', loc='left', y=0.85, x=0.02, fontsize='medium')
ax = axs[1]
ax.set_title('ConciseFormatter', loc='left', y=0.85, x=0.02, fontsize='medium')
ax.xaxis.set_major_formatter(
mdates.ConciseDateFormatter(ax.xaxis.get_major_locator()))
ax = axs[2]
ax.set_title('Manual DateFormatter', loc='left', y=0.85, x=0.02,
fontsize='medium')
# Text in the x axis will be displayed in 'YYYY-mm' format.
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%b'))
# Rotates and right-aligns the x labels so they don't crowd each other.
for label in ax.get_xticklabels(which='major'):
label.set(rotation=30, horizontalalignment='right')
plt.show()
Tiempo total de ejecución del script: (0 minutos 1.408 segundos)