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

Plotly实现单条折线按code1变量分段上色的方法

Plotly折线图实现单条折线分段着色

问题背景

原本绘制了一条无颜色区分的折线图,添加color="code1"参数后,图表被拆分为对应code1不同取值的多条折线,但实际需求是保持单条折线结构,仅按code1的取值为折线的不同分段设置对应颜色。

问题复现

以下代码会生成多条折线的图表,不符合需求:

import pandas as pd
import numpy as np
import plotly.express as px

df = pd.DataFrame({'date': pd.date_range(start='1/1/2018', periods=800),
                     'value': np.random.randint(0, 1000, 800)})
# 添加阶段标识列
df['code1'] = np.repeat(['ABC', 'BCD', 'CDE', 'DEF']*4, 50)
fig = px.line(df, x="date", y="value", color="code1", template='plotly_white')
fig.add_scatter(x=df["date"], y=df["value"], line=dict(color="white"))
fig.update_yaxes(autorange="reversed")
fig.update_layout(title="day vs depth", xaxis_title="date", yaxis_title="depth")
fig.show()

解决方案

通过创建周期标识区分同一code1的不同出现周期,结合line_group参数实现单条折线的分段着色:

import pandas as pd
import numpy as np
import plotly.express as px

df = pd.DataFrame({
    'date': pd.date_range(start='1/1/2018', periods=800),
    'value': np.random.randint(0, 1000, 800)
})

df['code1'] = np.repeat(['ABC', 'BCD', 'CDE', 'DEF']*4, 50)

# 生成周期列:每次code1变化时递增,区分同一code1的不同分段周期
df['cycle'] = (df['code1'] != df['code1'].shift()).cumsum()
# 组合code1和cycle为唯一分组标识
df['code_cycle'] = df['code1'] + '_' + df['cycle'].astype(str)

# 自定义code1对应的颜色映射
color_discrete_map = {'ABC': 'blue', 'BCD': 'green', 'CDE': 'red', 'DEF': 'purple'}

# 使用line_group指定折线分组,color指定分段颜色
fig = px.line(df, x="date", y="value", color='code1', line_group='code_cycle', 
              color_discrete_map=color_discrete_map, template='plotly_white')

fig.update_yaxes(autorange="reversed") 
fig.update_layout(title="day vs depth", xaxis_title="date", yaxis_title="depth")
fig.update_traces(connectgaps=False) # 避免不同分段间自动连接
fig.show()

该代码会生成单条折线,并按code1的不同取值为折线分段设置对应颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:29:58