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

Plotly图表将索引转换为pandas datetime后出现乱线如何解决

Plotly绘图出现锯齿乱线问题排查与解决

问题原因

出现锯齿乱线的核心原因是三条折线的x轴数据类型不统一:

  • 你仅对新增的df['Date']列做了pd.to_datetime格式转换,原始的df.index仍然是字符串格式的日期值
  • 第一条折线的x轴使用datetime类型的df['Date'],后两条折线的x轴使用字符串类型的df.index,Plotly无法按时间顺序正确对齐两类不同类型的x坐标,导致折线连接顺序混乱,最终出现锯齿状乱线。

解决方案

只需统一所有折线的x轴数据类型即可,以下两种方案任选其一:

方案1:统一将索引转为datetime格式(推荐)

在数据处理阶段先完成索引的格式转换,后续所有折线都用索引作为x轴数据源即可:

# 原数据处理部分修改
df = ((pd.read_csv('Book1.csv')).set_index('Date'))[:-1]
# 新增行:先把索引转为datetime格式
df.index = pd.to_datetime(df.index)
df['SMA30'] = df.Total.rolling(30).sum()
df['SMA365'] = df.Total.rolling(365).sum()
df['Monthly Avg'] = df.SMA30.mean()
# 直接从索引赋值即可,不需要重复转换
df['Date'] = df.index

# 绘图部分所有Trace的x都用df.index,保持统一
fig = go.Figure()
fig.update_layout(title = 'EQ Footfall')
fig.add_trace(go.Scatter(x=df.index, y=df.Total, name = 'Footfall Daily'))
fig.add_trace(go.Scatter(x=df.index, y=df.SMA30, name = 'SMA30'))
fig.add_trace(go.Scatter(x=df.index, y=df.SMA365, name = 'SMA365'))
fig.update_xaxes(rangeslider_visible=True)
fig.update_xaxes(tickangle=-45)

方案2:所有折线统一使用已转换的df['Date']列作为x轴

如果不需要修改索引格式,直接将后两条折线的x轴数据源替换为df['Date']即可:

# 绘图部分修改
fig.add_trace(go.Scatter(x=df['Date'], y=df.Total, name = 'Footfall Daily'))
fig.add_trace(go.Scatter(x=df['Date'], y=df.SMA30, name = 'SMA30'))
fig.add_trace(go.Scatter(x=df['Date'], y=df.SMA365, name = 'SMA365'))

内容的提问来源于stack exchange,提问作者Shan Govind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:57:04