Plotly.py多图表同画布绘制超时问题求助
砍掉不必要的交互元素:
除了关闭x轴范围滑块,还可以把悬停模式改成hovermode='x unified',避免逐点渲染悬停提示;不需要网格线的话,直接设xaxis.showgrid=False、yaxis.showgrid=False,减少浏览器要渲染的DOM元素数量。优化数据传输效率:
别用列表或者DataFrame传数据,直接用numpy数组给Plotly,速度更快;另外先把1000行数据里的冗余、重复内容清掉,能少一行是一行。批量添加轨迹:
3条EMA散点线都是同类型轨迹,直接用fig.add_traces()批量塞进去,别一次次调用add_trace,减少函数调用开销;标记散点如果和其他轨迹有重叠逻辑,尽量合并数据,别重复渲染。切换WebGL渲染模式:
给散点类轨迹加上render_mode='webgl',WebGL比SVG更适合大数据量渲染,示例代码:fig.add_scatter(x=ema_x_data, y=ema_y_data, mode='lines', render_mode='webgl')OHLC和柱状图本身性能还行,重点优化散点类就行。
默认隐藏部分轨迹:
把非核心的轨迹默认设为visible='legendonly',让用户自己点图例切换显示,避免一次性渲染所有图表;或者加个按钮组,实现不同图表组的切换,分批渲染。升级Plotly版本:
你用的Plotly版本大概率比较旧,Python 3.7.7能兼容5.x系列的稳定版,新版本修复了很多多轨迹同画布的性能bug,升级后超时问题大概率能缓解。降低数据精度:
把OHLC、EMA这些数值的精度砍一砍,比如保留2-4位小数,既不影响看图表,又能减少浏览器处理的数据量。
内容的提问来源于stack exchange,提问作者Almodius

