如何解决Plotly Go绘制多日期时间序列的混乱绘图问题
解决多组24小时时间序列叠加绘图混乱的问题
你的问题核心是把TIME列当成字符串类别处理,导致Plotly把每天重复的时间点当作独立X轴项,最终刻度拥挤、线条重叠混乱。下面是针对性解决方案:
关键修改思路
把TIME转换成连续的时间数值(比如从0点开始的分钟数),让6组数据的X轴完全对齐,之后再把X轴刻度格式化为友好的时间字符串,兼顾数据对齐和可读性。
修改后的完整代码
import random import pandas as pd import numpy as np import plotly.graph_objects as go import seaborn as sns random.seed(0) # 生成示例数据 df = pd.DataFrame({'DATE_TIME': pd.date_range('2022-11-01', '2022-11-06 23:00:00', freq='20min'), 'ID': [random.randrange(1, 3) for n in range(430)]}) df['VALUE1'] = [random.uniform(110, 160) for n in range(430)] df['INSPECTION'] = df['DATE_TIME'].dt.day df['TIME'] = df['DATE_TIME'].dt.time df['TIME'] = df['TIME'].astype('str') # 新增:将TIME转换为从0点开始的分钟数(连续数值) df['TIME_MINUTES'] = pd.to_timedelta(df['TIME']).dt.total_seconds() // 60 # 筛选ID=1的数据 df_id = df[df.ID == 1] list_inspection = sorted(df_id['INSPECTION'].unique()) pal = list(sns.color_palette(palette='viridis', n_colors=len(list_inspection)).as_hex()) fig = go.Figure() for d, p in zip(list_inspection, pal): subset = df_id[df_id['INSPECTION'] == d] fig.add_trace(go.Scatter( x=subset['TIME_MINUTES'], y=subset['VALUE1'], name=f"检查{d}", line_color=p, hovertemplate='时间: %{customdata}<br>VALUE1: %{y:.2f}', customdata=subset['TIME'] # hover时显示原始时间字符串 )) # 配置X轴:将分钟数转换回时间格式显示 fig.update_xaxes( tickvals=np.arange(0, 24*60+1, 360), # 每6小时一个刻度(360分钟) ticktext=['00:00', '06:00', '12:00', '18:00', '24:00'], title='时间' ) fig.update_yaxes(title='VALUE1') fig.update_layout(title='ID=1的6组24小时测量数据', legend_title='检查批次') fig.show()
改动说明
- 数据转换:新增
TIME_MINUTES列,把时间字符串转成从0点开始的分钟数,让X轴变成连续数值轴,确保6组数据的时间点完全对齐。 - Hover优化:用
customdata绑定原始时间字符串,鼠标悬停时能看到具体时间,不影响数据对齐的同时提升可读性。 - X轴刻度配置:手动设置刻度间隔(每6小时一个),并把刻度值转换回时间字符串,避免刻度拥挤。
- 代码精简:移除无关库导入,只保留必要部分,让逻辑更清晰。
这样处理后,6组24小时的数据会在同一个连续时间轴上对齐展示,线条不会混乱,X轴刻度清晰易读。
内容的提问来源于stack exchange,提问作者dsapprentice
相关产品推荐
相关产品推荐

