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

如何用Plotly.express为序数变量设置匹配顺序的颜色渐变

解决Plotly折线图序数变量颜色渐变对应问题

你的问题核心是序数类型的color变量没有按数值顺序匹配颜色渐变——原代码中px.colors.sample_colorscale生成的颜色是按数据中color唯一值的出现顺序分配,而非数值排序。要实现color=1(浅蓝)、color=2(中蓝)、color=3(深蓝)的对应关系,只需调整颜色映射逻辑:

修改步骤

  1. 对color的唯一值按数值排序,确保顺序为1→2→3
  2. 基于排序后的数量生成对应渐变颜色
  3. 用字典建立「颜色值-渐变颜色」的映射关系
  4. 绘图时使用color_discrete_map参数指定映射,替代原有的color_discrete_sequence

修改后的完整代码

import pandas as pd
import plotly.express as px

data = {'date': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02','2024-01-02', '2024-01-03','2024-01-03'],
        'color': [1, 3, 2, 3, 1, 3, 2],
        'sample': [0.5, 0.2, 0.8, 0.7, 0.4, 0.9, 0.3]}
df1 = pd.DataFrame(data)

# 对color的唯一值按数值排序
sorted_color_values = sorted(df1['color'].unique())
# 基于排序后的数量生成渐变颜色
myscale = px.colors.sample_colorscale(
    colorscale=px.colors.sequential.Blues,
    samplepoints=len(sorted_color_values),
    low=0.0, high=1.0, colortype="rgb"
)
# 建立颜色值到渐变颜色的映射字典
color_mapping = dict(zip(sorted_color_values, myscale))

# 使用color_discrete_map指定自定义映射
px.line(
    df1, 
    x="date", 
    y="sample", 
    markers=True, 
    color='color', 
    color_discrete_map=color_mapping
).show()

代码说明

  • sorted(df1['color'].unique())确保我们按1、2、3的逻辑顺序处理颜色值
  • color_discrete_map参数可精准指定每个color值对应的颜色,彻底解决原代码中按数据出现顺序分配颜色的问题
  • 保留原有的sequential.Blues渐变,确保颜色深浅与序数变量的数值大小完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:27:07