ax.get_xlim()对DatetimeIndex返回错误日期,如何修复?
问题原因与修复方案
问题根源
你调用ax.get_xlim()的时机错了——在绘制数据之前就获取了轴范围。此时坐标轴还未绑定任何数据,matplotlib使用默认的x轴范围(0到1),而matplotlib会把日期转换为从1970-01-01(Unix纪元)开始的浮点天数,0对应的自然就是1970-01-01。
修复方法
调整代码顺序,先绘制数据,再获取x轴范围,让matplotlib先根据数据自动适配坐标轴范围:
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame({ 'Date': pd.date_range('1980-01-01', '2023-01-01', freq='M'), 'Value': np.random.rand(516) }) data=data.set_index('Date') data.index=pd.to_datetime(data.index) data=data.resample('M').last() data=data['2003-01-01':] fig, ax = plt.subplots() # 先绘制数据,让坐标轴适配数据范围 ax.plot(data) # 再获取正确的x轴范围 xmin, xmax = ax.get_xlim() print(pd.Timestamp(xmin)) # 现在会输出2003-01-01相关的时间戳
补充说明
matplotlib处理日期数据时,会将datetime对象转换为从1970-01-01起始的浮点型天数。只有当数据绘制到坐标轴上后,轴才会根据数据的实际范围自动调整xlim,此时调用get_xlim()才能拿到预期的结果。
内容的提问来源于stack exchange,提问作者user20856754
相关产品推荐
相关产品推荐

