如何修改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()
关键说明
- 核心修改:通过
DateFormatter指定你想要的日期格式字符串,再把它设置给X轴的主格式化器,matplotlib就会按照指定格式渲染日期。 - 为什么转索引为新列没用?:如果只是把索引转成新列,但绘图时依然用
df.index作为X轴数据,matplotlib还是会用默认的日期格式化逻辑。要是想用新列当X轴,得改成ax.plot(df['你的日期列名'], df['Adj Close']),但显然直接修改原索引的格式化器更高效。 - 可选优化:
plt.xticks(rotation=45)能旋转标签避免文本重叠;plt.tight_layout()确保标签不会被图表边缘截断。
内容的提问来源于stack exchange,提问作者NaN
相关产品推荐
相关产品推荐

