You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中自定义X轴刻度:年度首个日期显示yy.m格式

解决Matplotlib X轴日期自定义格式化问题

要实现日常日期显示月份(如1、2),年度首个数据日期显示yy.m格式(如22.11),可以通过自定义日期格式化函数来实现,核心是先识别每个年度在数据中的第一个日期,再针对性设置格式:

实现步骤

  1. 预处理数据,提取每个年度对应的首个数据日期
  2. 编写自定义格式化函数,判断当前日期是否为年度首个日期,返回对应格式
  3. 将自定义函数绑定到Matplotlib的X轴格式化器

代码示例

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import datetime

# 生成测试数据(模拟随机年度起始的日期)
dates = pd.date_range(start='2022-11-01', end='2024-03-01', freq='MS')
values = [i**0.5 for i in range(len(dates))]

# 提取每个年度的首个数据日期
year_first_dates = dates.groupby(dates.year).min()

# 自定义格式化函数
def custom_date_formatter(x, pos):
    # 将matplotlib的数值日期转换为datetime对象
    date = mdates.num2date(x)
    # 判断是否为该年度的首个数据日期
    if date in year_first_dates.values:
        return f"{date.year % 100}.{date.month}"
    else:
        return f"{date.month}"

# 绘制折线图
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(dates, values)

# 应用自定义格式化器
ax.xaxis.set_major_formatter(mdates.FuncFormatter(custom_date_formatter))
# 自动调整X轴标签避免重叠
fig.autofmt_xdate()

plt.tight_layout()
plt.show()

关键说明

  • year_first_dates通过分组年份取最小值,精准定位每个年度在数据中的第一个日期(不管是1月还是其他月份)
  • FuncFormatter允许我们完全自定义每个刻度的显示文本,灵活处理特殊日期的格式需求
  • 如果你的日期数据不是按月频率,只需调整year_first_dates的生成逻辑,确保准确抓取每个年度的首个数据点即可

内容的提问来源于stack exchange,提问作者user3685918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:22:08