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

如何修改Matplotlib中X轴索引的日期显示格式?

解决Matplotlib中X轴日期格式显示问题

我明白你想把股价图的X轴日期改成YYYY-MM-DD或者YYYY-MM格式的需求,之前转索引为新列没效果是因为没正确配置matplotlib的日期格式化器,直接修改坐标轴的格式设置就能搞定!

修改后的完整代码

from datetime import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
from matplotlib.dates import DateFormatter  # 导入日期格式化工具
import pandas as pd
import pandas_datareader.data as web
import os

start = dt(2017, 1, 1)
end = dt.now()
df = web.get_data_yahoo('AAPL', start, end, interval='d')
df['30_sma'] = df['Adj Close'].rolling(window=30, min_periods=None).mean()

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(df.index, df['Adj Close'], label='Adj Close')
ax.plot(df.index, df['30_sma'], label='30-day SMA')

# 设置X轴日期格式
# 想要YYYY-MM-DD格式用'%Y-%m-%d',想要YYYY-MM用'%Y-%m'
date_formatter = DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_formatter)

# 旋转X轴标签避免重叠(可选但推荐)
plt.xticks(rotation=45)

# 添加图例(可选)
plt.legend()

plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

关键说明

  1. 核心修改:通过DateFormatter指定你想要的日期格式字符串,再把它设置给X轴的主格式化器,matplotlib就会按照指定格式渲染日期。
  2. 为什么转索引为新列没用?:如果只是把索引转成新列,但绘图时依然用df.index作为X轴数据,matplotlib还是会用默认的日期格式化逻辑。要是想用新列当X轴,得改成ax.plot(df['你的日期列名'], df['Adj Close']),但显然直接修改原索引的格式化器更高效。
  3. 可选优化:plt.xticks(rotation=45)能旋转标签避免文本重叠;plt.tight_layout()确保标签不会被图表边缘截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:11