使用DateFormatter时日期重置为1970?Pandas绘图x轴年份标签异常如何解决
问题原因
该问题是Pandas与Matplotlib的日期体系不兼容导致的:
Pandas的DataFrame.plot()默认使用自身的日期刻度体系,没有采用Matplotlibmdates模块识别的日期序数作为x轴单位,直接调用mdates提供的定位器、格式化器会因为坐标单位不匹配,出现标签不显示、日期解析错误的问题。你看到的异常日期就是对错误坐标值做日期格式化输出的结果。
解决方案
方案1:开启Pandas绘图的Matplotlib日期兼容模式
绘图时传入x_compat=True参数,强制Pandas使用Matplotlib兼容的日期坐标系,后续的mdates配置即可正常生效:
import matplotlib.dates as mdates # 绘图时添加兼容参数 ax = df.plot(x_compat=True) # 按需求配置年刻度 ax.xaxis.set_major_locator(mdates.YearLocator(base=1)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y')) # 可选:自动旋转x轴标签避免重叠 ax.get_figure().autofmt_xdate()
方案2:直接使用Matplotlib原生API绘图
跳过Pandas内置绘图的自定义坐标系,直接传入DatetimeIndex作为x轴数据即可:
import matplotlib.pyplot as plt import matplotlib.dates as mdates fig, ax = plt.subplots() # 直接传datetime索引作为x轴 ax.plot(df.index, df['size']) ax.xaxis.set_major_locator(mdates.YearLocator(base=1)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y')) plt.show()
内容的提问来源于stack exchange,提问作者Freddy Heppell
相关产品推荐
相关产品推荐

