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

使用PyPlot绘制Pandas DataFrame时日期偏移一天的问题求助

解决Matplotlib 2.1.1中Pandas Timestamp绘图日期偏移一天的问题

嘿,这个问题我之前在老版本Matplotlib里也踩过坑!尤其是你用的2.1.1版本,确实存在Pandas Timestamp和Matplotlib日期解析不兼容的情况,导致月末的日期会被偏移一天。下面给你几个可行的解决办法:

1. 把Timestamp转成Python原生datetime对象

Matplotlib对原生datetime的支持更稳定,你可以先把DataFrame的索引转换一下:

# 转换索引为python datetime类型
data.index = data.index.to_pydatetime()

# 再正常绘图并设置格式
fig, ax = plt.subplots()
ax.plot(data.index, data['test'])
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
plt.show()

2. 先用Pandas绘图再自定义坐标轴

Pandas自己的绘图接口会自动处理Timestamp的日期转换,避免偏移问题,之后你再用Matplotlib来调整格式就行:

# 先用Pandas绘制基础图
ax = data['test'].plot()

# 自定义日期格式和显示样式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
plt.tight_layout()  # 防止日期标签被截断
plt.show()

3. 强制设置月度刻度锚点

如果一定要用纯Matplotlib绘图,可以直接指定刻度锚定到每月最后一天,刚好匹配你的数据日期:

fig, ax = plt.subplots()
ax.plot(data.index, data['test'])

# 设置主刻度为每月最后一天,间隔1个月
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1, bymonthday=-1))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

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

额外建议:升级Matplotlib

这个日期偏移的bug在Matplotlib 3.0及以上版本已经被修复了,如果项目允许的话,升级一下版本能彻底解决这类问题:

pip install --upgrade matplotlib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:39