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
相关产品推荐
相关产品推荐

