日期刻度標籤#

Matplotlib 日期繪圖是藉由將日期實例轉換為自紀元(預設為 1970-01-01T00:00:00)以來的日數完成的。matplotlib.dates 模組提供轉換函式 date2numnum2date,用於將 datetime.datetimenumpy.datetime64 物件轉換為 Matplotlib 的內部表示法並從中轉換。這些資料類型已在 matplotlib.units 中描述的單位轉換機制中註冊,因此轉換會自動為使用者發生。註冊流程也會將軸的預設刻度 locatorformatter 設定為 AutoDateLocatorAutoDateFormatter

另一種格式化器是 ConciseDateFormatter,在下方的第二個 Axes 中使用(請參閱使用 ConciseDateFormatter 格式化日期刻度),這通常消除了旋轉刻度標籤的需求。最後一個 Axes 使用 DateFormatter 手動格式化日期,使用 datetime.date.strftime 中記錄的格式字串格式化日期。

DefaultFormatter, ConciseFormatter, Manual DateFormatter
import matplotlib.pyplot as plt

import matplotlib.cbook as cbook
import matplotlib.dates as mdates

# 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')['price_data']

fig, axs = plt.subplots(3, 1, figsize=(6.4, 7), layout='constrained')
# 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()

指令碼的總執行時間: (0 分鐘 3.622 秒)

由 Sphinx-Gallery 產生的圖庫