matplotlib绘制时间序列报错OverflowError: int too big to convert如何解决
解决方法
核心问题原因
主图X轴的Open_Time是带完整年月日的pandas datetime类型,而你生成的entry/exit时间存在两个问题:
- 加
.time()后得到的datetime.time类型,matplotlib无法直接转换为坐标数值,触发溢出报错 - 去掉
.time()后默认绑定1900-01-01的日期,和主图的实际日期范围完全不匹配,因此所有点被挤到X轴最左侧
具体操作步骤
- 先提取主图时间列的基准日期,保证新绘制的点和主图时间基准一致:
# 取时间列第一个值的日期作为基准,若为跨天数据可根据实际逻辑匹配对应日期 base_date = dataframe_tmp["Open_Time"].dt.date.iloc[0]
- 转换entry/exit时间时,替换为和主图一致的基准日期,不要调用
.time():
# 先解析字符串为datetime对象 entry_time = datetime.datetime.strptime(i["entry_time"], "%H:%M:%S") exit_time = datetime.datetime.strptime(i["exit_time"], "%H:%M:%S") # 替换年月日为基准日期 entry_time = entry_time.replace(year=base_date.year, month=base_date.month, day=base_date.day) exit_time = exit_time.replace(year=base_date.year, month=base_date.month, day=base_date.day)
- 复用主图的ax对象绘制点,避免坐标系混乱:
# 可根据需求调整marker、颜色等样式 ax.plot_date([entry_time, exit_time], [i["entry"], i["exit"]], marker='o', linestyle='', color='red')
效果说明
修改后绘制的点时间基准和主图完全一致,不会出现偏移问题。你之前已经设置了X轴格式化器mdates.DateFormatter('%H:%M:%S'),最终图表上只会显示时分秒,不会展示拼接的年月日,符合显示需求。
内容的提问来源于stack exchange,提问作者Elias Knudsen
相关产品推荐
相关产品推荐

