如何将Plotly时间序列折线图按日期分类,展示每日上下行速度
解决方案
要实现按日期拆分上传/下载速度折线(共20条)并共享时段X轴,核心是把宽格式数据转换为长格式,让每条折线对应「日期+速度类型」的组合,具体修改如下:
步骤1:重塑数据结构
原数据是宽格式(download和upload各占一列),需要用pd.melt转成长格式,让每条记录对应一个「日期-时段-速度类型-速度值」的组合:
# 原df生成后,添加这一步 df_melted = df.melt( id_vars=['date', 'time'], # 保留作为标识的列 value_vars=['download_mbps', 'upload_mbps'], # 需要转换的列 var_name='speed_type', # 新列:标识是上传还是下载 value_name='speed_value' # 新列:速度数值 )
步骤2:绘制折线图
用Plotly Express指定X轴为时段time,Y轴为速度值speed_value,通过分组参数生成对应折线:
方式1:颜色区分日期,线型区分上传/下载(更易读)
fig = px.line( df_melted, x='time', y='speed_value', color='date', # 不同日期用不同颜色 line_dash='speed_type', # 上传/下载用不同线型 labels={ 'time': '一天中的时段', 'speed_value': '速度(Mbps)', 'date': '日期', 'speed_type': '速度类型' }, title='每日上传/下载速度变化' ) fig.show()
方式2:生成20条独立折线(每个日期+类型单独一条)
如果需要图例直接显示「2024-05-01 下载」这类明确标签,可先合并日期和类型为新列:
df_melted['date_type'] = df_melted['date'].astype(str) + ' ' + df_melted['speed_type'].str.replace('_mbps', '') fig = px.line( df_melted, x='time', y='speed_value', color='date_type', labels={ 'time': '一天中的时段', 'speed_value': '速度(Mbps)', 'date_type': '日期-类型' }, title='每日上传/下载速度变化' ) fig.show()
关键说明
数据重塑后,每条记录对应一个具体的时段、日期、速度类型和数值,Plotly会自动按分组生成对应折线;所有折线共享time作为X轴,可直接对比不同日期同一时段的速度差异。
内容的提问来源于stack exchange,提问作者Paperclip Bob
相关产品推荐
相关产品推荐

