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

如何使用Plotly Express在同一图表为每个ID添加独立轨迹?

用Plotly Express绘制多ID轨迹图表解决方案

问题分析

你当前的代码仅提取了第一个ID的单个数据点绘制柱状图,无法展示完整轨迹,更无法添加其他ID的数据。核心原因是你的DataFrame是嵌套结构(每个ID对应日期、数值的列表),而Plotly Express需要长格式的扁平数据(每行对应一个数据点,包含ID、日期、数值)。

解决步骤

1. 扁平化数据

将嵌套的字典数据转换为扁平的DataFrame,每个数据点单独成一行,同时保留对应的ID。

2. 处理空值

过滤掉数据中的None值,避免绘图错误。

3. 绘制多轨迹图表

使用Plotly Express的line(或bar)函数,通过color='id'参数自动为每个ID生成独立轨迹。

完整代码示例

import pandas as pd
import plotly.express as px
from datetime import datetime

# 原始字典数据
data = [{'id': '37f883e7e4b47b9a463bd00a',
  'time_mins': [34.2, 24.6, 24.7, 19.9, 23.8, 18.9, None],
  'value': [-19.35, 10.21, 9.9, 24.68, 12.67, 27.76, None],
  'date': [datetime(2017, 8, 14, 6, 32, 1, 851000),
   datetime(2017, 8, 21, 5, 54, 11, 711000),
   datetime(2017, 8, 25, 11, 50, 22, 201000),
   datetime(2017, 8, 28, 5, 35, 9, 886000),
   datetime(2017, 9, 1, 11, 40, 22, 159000),
   datetime(2017, 9, 11, 6, 25, 16, 110000),
   None]},
 {'id': '37eba6db0eed3488860b07ed',
  'time_mins': [23.7, 21.0, 23.0, 19.7, 21.0, 21.1, 20.1, 20.0],
  'value': [12.98, 21.29, 15.13, 25.29, 21.29, 20.98, 24.06, 24.37],
  'date': [datetime(2017, 8, 4, 12, 21, 1, 422000),
   datetime(2017, 8, 11, 12, 0, 57, 744000),
   datetime(2017, 8, 18, 11, 54, 11, 655000),
   datetime(2017, 8, 20, 2, 12, 4, 759000),
   datetime(2017, 8, 27, 2, 4, 24, 745000),
   datetime(2017, 8, 28, 6, 10, 17, 230000),
   datetime(2017, 9, 8, 12, 1, 8, 540000),
   datetime(2017, 9, 15, 11, 30, 57, 29000)]},
 {'id': '37f0eccc09f3193bb0d63725',
  'time_mins': [16.8, 17.4, 17.6, 17.4, 16.4],
  'value': [34.22, 32.38, 31.76, 32.38, 35.45],
  'date': [datetime(2017, 8, 8, 12, 14, 48, 844000),
   datetime(2017, 8, 15, 11, 37, 18, 1000),
   datetime(2017, 8, 22, 11, 43, 55, 218000),
   datetime(2017, 8, 29, 11, 40, 29, 524000),
   datetime(2017, 9, 5, 11, 50, 23, 651000)]},
 {'id': '6303630c067719cf5bb7c98e',
  'time_mins': [21.2, None, 23.0],
  'value': [20.68, None, 15.13],
  'date': [datetime(2017, 8, 22, 12, 9, 44, 371000),
   None,
   datetime(2017, 9, 12, 11, 47, 10, 55000)]},
 {'id': '37e905f5ba0a4ac5b6b26ee0',
  'time_mins': [19.0, 18.1, 17.8, 14.5, 13.8],
  'value': [27.45, 30.22, 31.14, 41.3, 43.46],
  'date': [datetime(2017, 8, 2, 11, 45, 5, 908000),
   datetime(2017, 8, 4, 11, 30, 25, 236000),
   datetime(2017, 8, 8, 11, 36, 59, 697000),
   datetime(2017, 8, 11, 11, 30, 28, 737000),
   datetime(2017, 8, 13, 1, 22, 59, 471000)]}]

# 扁平化数据
flat_data = []
for item in data:
    id_val = item['id']
    # 遍历每个日期和数值的对应对
    for date, val in zip(item['date'], item['value']):
        if date is not None and val is not None:
            flat_data.append({'id': id_val, 'date': date, 'value': val})

# 转换为DataFrame
df = pd.DataFrame(flat_data)

# 绘制多轨迹折线图(如需柱状图,替换为px.bar即可)
fig = px.line(df, x='date', y='value', color='id', 
              title='各ID数值随日期变化轨迹',
              labels={'date': '日期', 'value': '数值', 'id': 'ID'})
fig.show()

代码说明

  • 扁平化处理:遍历每个ID的日期和数值列表,将有效数据点拆分为单独行,确保Plotly能识别每个ID的完整数据序列。
  • 空值过滤:跳过date或value为None的条目,避免绘图异常。
  • 多轨迹生成:color='id'参数自动为每个ID分配不同颜色并生成图例,实现同一图表内的多条独立轨迹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:30:44