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

matplotlib设置X轴日期格式后标签异常问题咨询

问题原因
  • 核心原因是日期数据的存储格式不兼容:你通过pd.read_csv读取的Date列默认是字符串类型,即使手动通过pd.to_datetime转换,得到的也是pandas专属的datetime64类型,它的时间戳基准(1970-01-01起的纳秒计数)和matplotlib.dates.DateFormatter要求的matplotlib内部日期基准(公元0年起的天数计数)完全不同,直接传入格式化器就会出现日期完全错误的问题。
  • 测试代码能正常运行,是因为用了Python标准库datetime模块生成的原生datetime对象,matplotlib可以自动将其转换为自身兼容的日期计数,所以格式化生效。
解决方案

只需要在读取数据时将日期列转换为matplotlib兼容的格式即可,修改后完整代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mpl_dates

# 读取时直接解析日期列,也可以后续用pd.to_datetime手动转换
df = pd.read_csv('data_bitcoin.csv', parse_dates=['Date'])
# 将pandas datetime64类型转换为Python原生datetime类型
price_date = df['Date'].dt.to_pydatetime()
price_close = df['Close']

plt.plot_date(price_date, price_close, linestyle = 'solid')
plt.gcf().autofmt_xdate()
date_format = mpl_dates.DateFormatter('%b, %d %Y')   
plt.gca().xaxis.set_major_formatter(date_format)
plt.show()

如果不想转换为原生datetime,也可以用mpl_dates.date2num直接处理pandas的datetime64列,效果一致:

price_date = mpl_dates.date2num(df['Date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:18:01