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

如何用Plotly绘制单条随c1值变色的连续折线图?

实现Plotly单条连续折线按c1值切换颜色

当使用Plotly Express的px.line()并设置color='c1'时,Plotly会将不同c1值的数据拆分为独立折线,无法实现单条连续折线按c1切换颜色的需求。要解决这个问题,我们可以使用Plotly Graph Objects手动构建折线,将连续相同c1值的线段作为单独的trace绘制,确保整体折线连续。

解决方案步骤

  • 为连续相同的c1值分组:通过判断相邻行c1值是否变化,生成分组ID,确保每个分组内的c1值连续相同。
  • 手动添加折线Trace:遍历每个分组,为每个分组添加一条折线Trace,使用对应c1值的颜色,相邻分组的折线会自然连接,形成整体连续的折线。
  • 自定义颜色映射:根据c1的不同值(-1、0、1)设置对应的颜色,提升可视化区分度。

完整代码示例

import pandas as pd
import plotly.graph_objects as go

# 测试数据
data = {
    "date": ['2021/01/07', '2021/01/08', '2021/01/11', '2021/01/12','2021/01/13','2021/01/14','2021/01/15'],
    "p1": [2, 4, 6, 6,4, 2,2],
    "c1":[0,1,1,0,-1,-1,0]
}
df = pd.DataFrame(data)
df['date1'] = pd.to_datetime(df['date'])

# 为连续相同的c1值生成分组ID
df['group_id'] = df['c1'].ne(df['c1'].shift()).cumsum()

# 定义c1对应的颜色映射
color_map = {-1: '#ff4d4d', 0: '#808080', 1: '#33cc33'}

# 初始化Figure
fig = go.Figure()

# 遍历每个分组,添加折线Trace
for group in df.groupby('group_id'):
    group_data = group[1]
    c1_val = group_data['c1'].iloc[0]
    fig.add_trace(go.Scatter(
        x=group_data['date1'],
        y=group_data['p1'],
        mode='lines+markers',  # 可选保留标记点,方便查看数据点
        line=dict(color=color_map[c1_val], width=2),
        name=f'c1={c1_val}'
    ))

# 调整布局
fig.update_layout(
    xaxis_title='日期',
    yaxis_title='P1',
    title='P1趋势(按c1切换颜色)',
    hovermode='x unified'
)

fig.show()

代码说明

  • 分组逻辑:df['c1'].ne(df['c1'].shift()).cumsum()会在c1值变化时生成新的分组ID,保证每个分组内的c1值连续一致。
  • 颜色映射:color_map自定义了不同c1值对应的颜色,你可以根据需求调整颜色代码。
  • Trace添加:每个分组对应一个Trace,由于分组是连续的,相邻Trace的终点和起点会自然连接,形成单条连续折线,同时不同段的颜色由c1值决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:07:03