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

Matplotlib中X轴每隔数月显示日期值而非全部显示的解决方法

解决Matplotlib日期X轴拥挤的简便方法

核心问题是你当前的Date列是字符串类型,Matplotlib把它当成普通类别处理,所以会显示所有日期。只要把日期转成datetime类型,再设置X轴的日期显示间隔就能解决。

方法一:Matplotlib原生设置

先把日期列转为datetime类型,再用matplotlib.dates模块的定位器控制显示间隔:

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

# 读取数据并转换日期类型
spread = pd.read_csv('I10Y3MTS_data.csv')
spread['Date'] = pd.to_datetime(spread['Date'])

plt.title('10yr 3mo Yield Spread')
plt.plot(spread.Date, spread.Spread)

# 获取当前坐标轴对象
ax = plt.gca()
# 设置每隔3个月显示一次日期(interval值可按需调整:1=每月,6=每半年)
ax.xaxis.set_major_locator(MonthLocator(interval=3))
# 设置日期显示格式,比如"YYYY-MM",也可以用'%b %Y'显示成"Jan 2020"
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))

# 旋转日期标签避免重叠,调整布局防止标签被截断
plt.xticks(rotation=45)
plt.tight_layout()

plt.show()

方法二:用Pandas绘图更省心

Pandas对日期轴的支持更友好,绘图后直接调整坐标轴即可:

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

spread = pd.read_csv('I10Y3MTS_data.csv')
spread['Date'] = pd.to_datetime(spread['Date'])

# 用Pandas直接绘图
ax = spread.plot(x='Date', y='Spread', title='10yr 3mo Yield Spread')
# 同样设置日期间隔和格式
ax.xaxis.set_major_locator(MonthLocator(interval=3))
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))

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

关键说明

  • 必须先把Date列转为datetime类型,否则Matplotlib无法识别为时间轴,只会显示所有字符串标签。
  • MonthLocator(interval=N)里的N可以根据你的数据时间跨度调整,比如数据跨度10年可以设成12(每年显示一次)。
  • 旋转日期标签和tight_layout()是为了避免标签重叠或被截断,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:15:39