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

如何在Matplotlib月度绘图中去除X轴年份显示

这个问题我太懂了——叠加多年数据到单一年份的日期轴上,多余的年份标注不仅破坏视觉效果,还容易误导看图表的人,确实挺闹心的。给你两个直接有效的解决思路,亲测好用:

方法一:自定义日期格式化器(最推荐)

核心思路是告诉Matplotlib只显示月份缩写,完全屏蔽年份。我们可以用matplotlib.dates里的DateFormatter和MonthLocator来精准控制刻度和标签:

import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, MonthLocator
import pandas as pd
import numpy as np

# 先模拟你的数据场景:1000组日值序列,索引是1985年全年日期
dates = pd.date_range(start="1985-01-01", end="1985-12-31", freq="D")
df = pd.DataFrame(np.random.randn(len(dates), 1000), index=dates)

# 创建画布和轴对象
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制所有序列,用alpha降低透明度避免重叠
for col in df.columns:
    ax.plot(df.index, df[col], alpha=0.08)

# 设置X轴为月度刻度
ax.xaxis.set_major_locator(MonthLocator())
# 自定义格式化器,只显示月份缩写(%b代表Jan/Feb这类缩写)
date_formatter = DateFormatter("%b")
ax.xaxis.set_major_formatter(date_formatter)

# 可选:调整标签旋转角度,避免重叠
plt.xticks(rotation=30)
plt.tight_layout()
plt.show()

这样设置后,X轴只会显示Jan、Feb...Dec,再也不会出现讨厌的1985了。而且这个方法是动态的,就算你缩放图表,刻度标签也会保持正确的月份显示。

方法二:结合Pandas绘图快速调整

如果你习惯用Pandas的df.plot()直接绘图,可以加上x_compat=True参数让Matplotlib接管日期轴的控制,再套用上面的格式化器:

import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, MonthLocator
import pandas as pd
import numpy as np

# 同样模拟数据
dates = pd.date_range(start="1985-01-01", end="1985-12-31", freq="D")
df = pd.DataFrame(np.random.randn(len(dates), 1000), index=dates)

# 用Pandas绘图并开启x_compat
ax = df.plot(alpha=0.08, figsize=(10, 6), x_compat=True)

# 同样设置刻度和格式化器
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter("%b"))

plt.xticks(rotation=30)
plt.tight_layout()
plt.show()

额外提醒

如果你的DataFrame索引还不是datetime类型,一定要先转换:

df.index = pd.to_datetime(df.index)

不然日期格式化器可能不起作用哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:15:44