บทนำ
การแสดง tick บนแกนเวลา (datetime axis) ให้ปี (year) แสดงทุก 12 เดือน ใช้ matplotlib.dates locators และ formatters: YearLocator สำหรับ major ticks (ปี), MonthLocator สำหรับ minor ticks (เดือน)
ตัวอย่างโค้ด
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# สร้างข้อมูลเวลา
d = pd.date_range("2020-01-01", "2021-06-01", freq="7D")
y = np.cumsum(np.random.normal(size=len(d)))
s = pd.Series(y, index=d)
# Date locators และ formatters
years = mdates.YearLocator() # Major: ทุกปี
months = mdates.MonthLocator() # Minor: ทุกเดือน
months_fmt = mdates.DateFormatter('%B') # ชื่อเดือนเต็ม
years_fmt = mdates.DateFormatter('\n%Y') # ปี (ขึ้นบรรทัดใหม่)
# Plot
fig, ax = plt.subplots()
ax.plot(s.index.to_pydatetime(), s)
# ตั้งค่า Major ticks (ปี)
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(years_fmt)
# ตั้งค่า Minor ticks (เดือน)
ax.xaxis.set_minor_locator(months)
ax.xaxis.set_minor_formatter(months_fmt)
# หมุน minor tick labels
plt.setp(ax.xaxis.get_minorticklabels(), rotation=90, fontsize=8)
ax.set_title("Date Axis: Year every 12 months, Month as minor")
plt.show()
คำอธิบาย Locators และ Formatters
| Class | หน้าที่ | ใช้สำหรับ |
|---|---|---|
YearLocator | Major tick ทุกปี | ปีหลัก |
MonthLocator | Minor tick ทุกเดือน | เดือนย่อย |
DateFormatter('%Y') | Format ปี (2020, 2021) | Major formatter |
DateFormatter('%B') | Format เดือนเต็ม (January, February) | Minor formatter |
DateFormatter('%b') | Format เดือนย่อ (Jan, Feb) | Minor formatter |
Date Format Codes
%Y - ปี 4 หลัก (2024)
%y - ปี 2 หลัก (24)
%B - ชื่อเดือนเต็ม (January)
%b - ชื่อเดือนย่อ (Jan)
%m - เดือนตัวเลข (01-12)
%d - วัน (01-31)
%H - ชั่วโมง 24h (00-23)
%M - นาที (00-59)
%S - วินาที (00-59)
ตัวอย่างเพิ่มเติม: AutoDateLocator (อัตโนมัติ)
# ให้ Matplotlib เลือก locator อัตโนมัติตาม zoom level
locator = mdates.AutoDateLocator()
formatter = mdates.ConciseDateFormatter(locator)
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)
สรุป
ใช้ YearLocator() + DateFormatter('%Y') สำหรับ major ticks (ปีทุก 12 เดือน) และ MonthLocator() + DateFormatter('%B') สำหรับ minor ticks (เดือน) ใช้ ConciseDateFormatter สำหรับการจัดการอัตโนมัติ