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

Plotly graph_objects:如何根据变量值为线条着色?

解决Plotly多条轨迹按连续色标统一着色的问题

问题根源

你的代码存在两个核心问题:

  • 轨迹用mode='lines'渲染,但你设置的是marker.color(控制散点颜色),而非line.color(控制线条颜色)
  • 传递给color的是整个vals数组,而非当前轨迹对应的单个vals[i]值,导致颜色映射逻辑完全错误

修正方案

使用Plotly内置的colors.sample_colorscale工具,根据每条轨迹对应的vals[i]值,从指定色标中提取精确匹配的颜色,再赋值给线条颜色。

修正后的代码

import plotly.graph_objects as go
import numpy as np
from plotly.colors import sample_colorscale

data = np.array([
    [0, 1, 2, 3, 4, 5],
    [0, 1.1, 2.1, 3.1, 4.1, 5.1],
    [1, 2, 3, 4, 5, 6],
    [2, 3, 4, 5, 6, 7],
    [2, 3.1, 4.1, 5.1, 6.1, 7.1],
    [3, 4, 5, 6, 7, 8]
]) # 每行对应一条轨迹的y值

vals = [0, 0, 1, 2, 2, 3] # 每条轨迹对应的色标映射值
nums = [1, 2, 3, 4, 5] # x轴数值

# 定义色标参数
colorscale = 'Viridis'
cmin = 0
cmax = 3

fig = go.Figure()
for i, row in enumerate(data):
    # 将当前值归一化到0-1区间,适配色标映射规则
    norm_val = (vals[i] - cmin) / (cmax - cmin)
    # 从指定色标中提取对应颜色
    line_color = sample_colorscale(colorscale, norm_val)[0]
    # 添加轨迹并设置线条颜色
    fig.add_trace(go.Scatter(
        x=nums,
        y=row,
        name=str(vals[i]),
        mode='lines',
        line=dict(color=line_color)
    ))

# 可选:添加颜色条,展示色标与数值的对应关系
fig.update_layout(
    coloraxis=dict(
        colorscale=colorscale,
        cmin=cmin,
        cmax=cmax,
        colorbar=dict(title='色标值')
    )
)

fig.show()

效果说明

  • 相同vals[i]值的轨迹会获得完全一致的颜色:前两条轨迹对应Viridis色标的紫色,第四、五条对应同一中间色,第六条对应色标最大值的黄色
  • 若不需要展示颜色条,可删除update_layout部分的配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:33