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

如何基于列值为Plotly折线图设置渐变颜色?

解决Plotly实现按列序号渐变颜色折线图的问题

错误原因分析

你使用px.line时出现长度不匹配错误,核心原因是Plotly Express更适配长格式数据,而你的DataFrame是宽格式(每列对应一条折线)。df.columns仅包含10个元素,但x=df.index和y对应的是1000行数据,参数长度不一致导致报错。

复刻Matplotlib渐变效果的Plotly实现

要实现和Matplotlib一致的按列序号渐变颜色折线图,需先将宽格式数据转为长格式,再用Plotly Express绘制:

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

# 生成原始DataFrame
df = pd.DataFrame(
    data=np.cumsum( np.sqrt(1 / 1000) * np.random.normal(size=(1000, 10)), axis=0),
    columns=np.array([*range(1, 11)]))

# 将宽格式转为长格式
df_melt = df.reset_index().melt(
    id_vars='index', 
    var_name='Signal Number', 
    value_name='Value'
)

# 绘制渐变颜色折线图
fig = px.line(
    df_melt,
    x='index',
    y='Value',
    color='Signal Number',
    color_continuous_scale='viridis',  # 和Matplotlib的viridis色阶匹配
    labels={'index': '索引', 'Value': '数值'}
)

# 自定义颜色条标题
fig.update_layout(coloraxis_colorbar=dict(title='信号编号'))

fig.show()

实现自定义分段颜色(1-3黄、4-7橙、8-10红)

如果需要按指定区间设置固定颜色,可以通过自定义颜色映射实现:

# 定义分段颜色映射
color_map = {
    **{str(i): '#f9e047' for i in range(1,4)},  # 1-3列用黄色
    **{str(i): '#ff9d48' for i in range(4,8)},  # 4-7列用橙色
    **{str(i): '#ff4b47' for i in range(8,11)}  # 8-10列用红色
}

fig = px.line(
    df_melt,
    x='index',
    y='Value',
    color='Signal Number',
    color_discrete_map=color_map,
    labels={'index': '索引', 'Value': '数值'}
)

fig.show()

关键说明

  • 长格式转换:melt函数将每列的折线数据转为行记录,让每个数据点都携带对应的列序号,确保color参数能正确匹配颜色依据。
  • 连续色阶:color_continuous_scale参数可实现和Matplotlib一致的渐变效果,同时自动生成对应颜色条。
  • 分段配色:color_discrete_map参数可以为指定列序号绑定固定颜色,满足自定义区间的配色需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:25:34