如何用Plotly.express为序数变量设置匹配顺序的颜色渐变
解决Plotly折线图序数变量颜色渐变对应问题
你的问题核心是序数类型的color变量没有按数值顺序匹配颜色渐变——原代码中px.colors.sample_colorscale生成的颜色是按数据中color唯一值的出现顺序分配,而非数值排序。要实现color=1(浅蓝)、color=2(中蓝)、color=3(深蓝)的对应关系,只需调整颜色映射逻辑:
修改步骤
- 对
color的唯一值按数值排序,确保顺序为1→2→3 - 基于排序后的数量生成对应渐变颜色
- 用字典建立「颜色值-渐变颜色」的映射关系
- 绘图时使用
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
相关产品推荐
相关产品推荐

