如何禁用Matplotlib实时K线图表的位置自动重置,支持滚动缩放交互
实时K线交互失效问题解决方案
问题根源
- 每次更新时执行
ax.clear()会清空用户手动调整的缩放、平移等视图配置 mpf.plot()默认会根据全量数据自动调整坐标轴范围,覆盖用户自定义的视图参数- 原代码还存在类方法缩进错误、
df.append()方法已被pandas弃用的兼容问题
修复步骤
- 绘图前保存当前坐标轴的可视范围,绘图完成后恢复该范围
- 调用
mpf.plot()时添加update_xlim=False、update_ylim=False参数,禁止工具自动调整坐标轴 - 替换已废弃的
df.append()为pd.concat(),修正类方法缩进问题
修复后的animate函数代码
def animate(ival): global df global rs nxt = rtapi.fetch_next() if nxt is None: print('no more data to plot') ani.event_source.interval *= 3 if ani.event_source.interval > 12000: exit() return # 替换废弃的append方法 df = pd.concat([df, nxt]) rs = df.resample(resample_period).agg(resample_map).dropna() # 保存用户调整后的视图范围 curr_xlim = ax.get_xlim() curr_ylim = ax.get_ylim() ax.clear() # 绘图时关闭自动调整坐标轴 mpf.plot(rs, ax=ax, type='candle', update_xlim=False, update_ylim=False) # 恢复之前的视图范围 ax.set_xlim(curr_xlim) ax.set_ylim(curr_ylim)
可选优化
如果需要在用户未手动调整视图时,保持自动滚动显示最新K线,可以新增一个全局标记位,检测到用户调整过视图后再锁定范围,未调整时自动适配最新数据范围。
内容的提问来源于stack exchange,提问作者Giorgio
相关产品推荐
相关产品推荐

