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

如何用Plotly基于散点图数据绘制折线图?(附DataFrame示例)

Plotly绘制ID进度折线图方案

解决方案步骤

1. 数据格式转换

原始数据为宽格式(每个ID一行,包含三个时间节点),需转成长格式才能让Plotly正确绘制每个ID的连续折线。长格式下每个ID对应三行数据,分别记录start、step1、step2的天数和对应阶段。

2. 代码实现

import pandas as pd
import plotly.express as px

# 示例数据(替换为你的实际DataFrame)
df = pd.DataFrame({
    'id': ['a', 'b', 'c'],
    'start': [0, 0, 0],
    'step1': [10, 5, 1],
    'step2': [27, 45, 11]
})

# 转换为长格式,提取每个阶段的天数
long_df = pd.melt(df, id_vars='id', var_name='stage', value_name='day')

# 给阶段设置排序值,保证折线按start→step1→step2的顺序绘制
long_df['stage_order'] = long_df['stage'].map({'start': 0, 'step1': 1, 'step2': 2})
long_df = long_df.sort_values(['id', 'stage_order'])

# 绘制折线图
fig = px.line(
    long_df,
    x='day',  # X轴:从start开始的天数
    y='stage_order',  # Y轴:阶段的排序值
    color='id',  # 按ID区分线条颜色
    markers=True,  # 显示每个阶段的标记点
    labels={'day': '天数(从start开始)', 'stage_order': '阶段'}
)

# 替换Y轴刻度为阶段名称,提升可读性
fig.update_yaxes(tickvals=[0, 1, 2], ticktext=['start', 'step1', 'step2'])

# 调整布局样式
fig.update_layout(
    title='各ID进度折线图',
    xaxis_title='天数',
    yaxis_title='阶段'
)

fig.show()

3. 关键说明

  • 之前使用strip、scatter方法失败,是因为这两个方法仅能绘制离散点,无法自动连接同一ID的多个时间节点形成折线。
  • 转长格式是核心操作,确保Plotly能识别每个ID对应的连续时间序列。
  • 通过stage_order控制折线顺序,避免因阶段名称的字母排序导致折线逻辑混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:02