Nota
Fare clic qui per scaricare il codice di esempio completo
Etichette di spunta della data #
Il tracciamento della data di Matplotlib viene eseguito convertendo le istanze di data in giorni da un'epoca (per impostazione predefinita 1970-01-01T00:00:00). Il
matplotlib.dates
modulo fornisce le funzioni del convertitore date2num
e num2date
che convertono datetime.datetime
e numpy.datetime64
oggetti da e verso la rappresentazione interna di Matplotlib. Questi tipi di dati sono registrati con il meccanismo di conversione delle unità descritto in
matplotlib.units
, quindi la conversione avviene automaticamente per l'utente. Il processo di registrazione imposta anche il segno di spunta predefinito locator
e
formatter
per l'asse come AutoDateLocator
e
AutoDateFormatter
.
Un formattatore alternativo è il ConciseDateFormatter
, utilizzato nel secondo di Axes
seguito (vedere
Formattazione dei segni di spunta della data utilizzando ConciseDateFormatter ), che spesso elimina la necessità di ruotare le etichette dei segni di spunta. L'ultimo Axes
formatta le date manualmente, utilizzando
DateFormatter
per formattare le date utilizzando le stringhe di formato documentate in 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()
Tempo di esecuzione totale dello script: (0 minuti 1,408 secondi)