pandas时间序列图添加垂直竖线时竖线超出数据范围如何解决
问题原因
- 核心原因是pandas绘制时间序列时默认使用自定义的日期刻度转换逻辑,和matplotlib
axvline方法使用的日期数值单位不匹配,你传入的2021-08-23对应的x轴数值不在图表当前的x轴可视范围内,因此竖线显示在图外。 - 次要可能原因:你设置的date索引实际为object字符串类型,未正确转换为datetime64类型,导致日期匹配失效。
解决方法
第一步:先确认索引类型
执行以下代码验证索引是否为正确的datetime类型:
print(df.index.dtype)
如果输出不是datetime64[ns],先执行索引类型转换:
df.index = pd.to_datetime(df.index)
第二步:修改绘图代码
在df.plot中添加x_compat=True参数,强制pandas使用matplotlib原生日期格式,避免转换不匹配问题,完整代码如下:
ax = df.plot( figsize=(12,8), logy=True, title='Random Forest Regressor Performance', color={'price': 'blue', 'count': 'orange', 'pred': 'green'}, x_compat=True ) ax.axvline(pd.to_datetime('2021-08-23'), color='r', linestyle='--', lw=2)
备用方案
如果上述方法仍不生效,可以直接将日期转换为matplotlib识别的日期数值:
import matplotlib.dates as mdates ax.axvline(mdates.date2num(pd.to_datetime('2021-08-23')), color='r', linestyle='--', lw=2)
内容的提问来源于stack exchange,提问作者PretendNotToSuck
相关产品推荐
相关产品推荐

