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

如何使用Plotly绘制单条不同分段颜色的折线

解决方案

你报错的核心原因是go.Scatter不存在直接的color参数,折线颜色需要通过line属性配置。以下是完整可运行的实现代码,同时满足定性色阶、hv连线、不拆分单条折线的需求:

import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots

x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]

# 选择定性色盘,可根据需求替换为其他qualitative系列色盘,也可自定义色值列表
qual_colors = px.colors.qualitative.Plotly
# 记录已显示的图例类别,避免重复生成图例项
shown_categories = set()

fig = make_subplots()

# 逐段添加不同颜色的折线段
for i in range(len(x_list)-1):
    current_color_cat = color_list[i]
    # 仅首次出现的颜色类别显示在图例中
    showlegend = current_color_cat not in shown_categories
    if showlegend:
        shown_categories.add(current_color_cat)
    fig.add_trace(go.Scatter(
        x=x_list[i:i+2],
        y=y_list[i:i+2],
        line_shape='hv',
        line=dict(
            color=qual_colors[current_color_cat],
            width=2
        ),
        mode='lines',
        name=f'类别{current_color_cat}',
        showlegend=showlegend
    ))

# 可选模块:添加原始散点,和你最初的散点图效果保持一致,不需要可以删除
fig.add_trace(go.Scatter(
    x=x_list,
    y=y_list,
    mode='markers',
    marker=dict(
        color=[qual_colors[c] for c in color_list],
        size=8
    ),
    showlegend=False
))

# 自定义布局
fig.update_layout(
    xaxis_title='X值',
    yaxis_title='Y值',
    legend_title='颜色类别'
)
fig.show()

补充说明

  • 如果你的color_list类别数量超过内置定性色盘的颜色数,直接自定义颜色列表即可,比如qual_colors = ["#e6194b", "#3cb44b", "#ffe119", "#4363d8"],按顺序对应你的类别编号即可
  • 不需要显示散点的话,直接删除对应添加散点trace的代码块即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:07