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
相关产品推荐
相关产品推荐

