Plotly散点图X轴错误聚合时间序列数据问题求助
Plotly Express散点图在Streamlit中时间轴异常聚合问题解决
问题概述
- 场景:在Streamlit仪表盘中用Plotly Express绘制每秒(精确到微秒)采集的时间序列散点图
- 异常表现:图表将约每两分钟的数据聚合在一起,X轴数据分布严重失真
- 对比验证:
- 预期效果:Matplotlib在Jupyter Notebook中绘制的图表,数据点在X轴均匀分布
- 排查结论:数据本身无问题,Plotly折线图可正确展示数据点的X轴间距
问题原因
Plotly Express散点图默认会对高密集度的时间序列数据触发自动聚合/采样逻辑——当数据量极大时(比如每秒1个点,小时级数据可达3600个点),为优化渲染性能,会合并邻近数据点,导致视觉上出现"两分钟聚合"的假象。而折线图因需要连接连续数据,不会启用该自动聚合规则。
解决方案
通过显式配置关闭Plotly的自动聚合功能,以下两种方案均可解决:
方案1:在px.scatter中强制禁用聚合
fig = px.scatter(df, x='dateTime', y='currentHeading', hover_data=['dateTime']) # 显式传入原始时间数据,触发全量渲染 fig.update_yaxes( scaleanchor="x", scaleratio=1) fig.update_xaxes(showgrid=False, tickformat="%H:%M:%S") # 强制关闭数据采样,确保所有点都被渲染 fig.update_traces(marker=dict(size=4), selector=dict(mode='markers'))
方案2:改用Plotly Graph Objects手动构建散点图
如果方案1效果不佳,直接使用底层API可实现更精准的控制:
import plotly.graph_objects as go fig = go.Figure(data=go.Scatter( x=df['dateTime'], y=df['currentHeading'], mode='markers', marker=dict(size=4) )) fig.update_yaxes(scaleanchor="x", scaleratio=1) fig.update_xaxes(showgrid=False, tickformat="%H:%M:%S")
效果验证
修改后,散点图会渲染所有原始数据点,X轴上的点将和Matplotlib绘制的效果一致,均匀分布,不会再出现异常聚合情况。
内容的提问来源于stack exchange,提问作者Harry de winton
相关产品推荐
相关产品推荐

