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

如何用Plotly Python绘制每个ID含4个子ID折线图的图表?

解决方案

步骤1:按主ID拆分数据集到字典

先把数据集按主ID(假设是你的A列)拆分,每个主ID对应独立的子DataFrame,后续循环处理更清晰:

import pandas as pd
import plotly.express as px

# 先把日期列转成datetime类型,避免绘图时识别错误
df['C'] = pd.to_datetime(df['C'])

# 按主ID分组,把每个组存入字典
id_data_dict = {main_id: group for main_id, group in df.groupby('A')}

步骤2:循环生成每个主ID的折线图

遍历字典里的每个主ID,用px.line直接生成包含4条子ID折线的图表——px.line会自动按子ID(B列)分组生成多条线条,不用手动逐个添加:

for main_id, sub_df in id_data_dict.items():
    # 生成图表,x轴是日期C,y轴是数值D,用B列区分不同子ID的线条
    fig = px.line(sub_df, x='C', y='D', color='B',
                  title=f'主ID {main_id} 子ID趋势对比',
                  labels={'C':'日期时间', 'D':'数值', 'B':'子ID'})
    
    # 调整布局,让图表更直观
    fig.update_layout(xaxis_tickformat='%Y-%m-%d %H:%M',  # 自定义日期显示格式
                      legend_title='子ID',
                      hovermode='x unified')  # 鼠标悬停时同步显示所有子ID的数值
    
    # 显示图表,也可以保存为HTML文件方便查看
    fig.show()
    # fig.write_html(f'主ID_{main_id}_趋势图.html')

如果需要更精细控制(用Plotly Go)

要是想自定义每条线的颜色、样式,用plotly.graph_objects手动添加轨迹:

import plotly.graph_objects as go

for main_id, sub_df in id_data_dict.items():
    fig = go.Figure()
    # 遍历每个子ID,单独添加折线轨迹
    for sub_id, sub_sub_df in sub_df.groupby('B'):
        fig.add_trace(go.Scatter(x=sub_sub_df['C'], y=sub_sub_df['D'],
                                mode='lines+markers',  # 同时显示线条和标记点
                                name=f'子ID {sub_id}',
                                line=dict(width=2)))  # 自定义线条宽度
    
    fig.update_layout(title=f'主ID {main_id} 子ID趋势对比',
                      xaxis_title='日期时间',
                      yaxis_title='数值',
                      legend_title='子ID')
    fig.show()

之前踩坑的原因

你之前用px.line效果不好,大概率是没按主ID拆分数据,直接用全量数据绘图会把所有主ID的线条混在一起;循环失败可能是分组逻辑没写对,用字典存储拆分后的DataFrame是正确思路,只是需要配合遍历生成图表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:13:27