You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:42:35