Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Matplotlib: แสดง Year Tick ทุก 12 เดือนบนแกนเวลา

บทนำ

การแสดง 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หน้าที่ใช้สำหรับ
YearLocatorMajor tick ทุกปีปีหลัก
MonthLocatorMinor 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 สำหรับการจัดการอัตโนมัติ