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

Plotly中如何为所有离散值设置独一无二的颜色?

解决Plotly离散数据颜色重复问题

当Plotly默认的定性颜色序列(约15种)不足以覆盖所有离散值时,会循环复用颜色,导致重复。以下几种方法可以确保每个离散值拥有唯一颜色:

1. 手动定义足够多的自定义颜色序列

直接创建包含足够数量独特颜色的列表,通过color_discrete_sequence参数传入绘图函数。颜色可以用十六进制码、RGB值或标准颜色名称表示。

示例代码:

import plotly.express as px
import pandas as pd

# 构造含20个唯一分类的示例数据
df = pd.DataFrame({
    'category': [f'分类_{i}' for i in range(20)],
    '数值': [i*3 for i in range(20)]
})

# 自定义20种互不重复的颜色
custom_colors = [
    '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7',
    '#DDA0DD', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9',
    '#F8C471', '#82E0AA', '#F1948A', '#85C1E9', '#D7BDE2',
    '#AED6F1', '#F9E79F', '#C39BD3', '#ABEBC6', '#F5B7B1'
]

# 绘图时指定自定义颜色序列
fig = px.bar(df, x='category', y='数值', color='category',
             color_discrete_sequence=custom_colors)
fig.show()

2. 合并Plotly内置的多个定性颜色序列

Plotly提供了多个内置定性颜色序列(如Plotly、D3、G10、T10等),将它们拼接可以获得更多独特颜色,无需手动定义。

示例代码:

import plotly.express as px
import pandas as pd

df = pd.DataFrame({
    'category': [f'分类_{i}' for i in range(30)],
    '数值': [i*3 for i in range(30)]
})

# 合并多个内置颜色序列,扩展颜色数量
extended_colors = px.colors.qualitative.Plotly + px.colors.qualitative.D3 + \
                  px.colors.qualitative.G10 + px.colors.qualitative.T10

# 截取对应数量的颜色,避免多余
target_colors = extended_colors[:len(df['category'].unique())]

fig = px.bar(df, x='category', y='数值', color='category',
             color_discrete_sequence=target_colors)
fig.show()

3. 从连续色阶中采样离散颜色

如果需要渐变风格的独特颜色,可以从Plotly的连续色阶(如Viridis、Cividis)中采样对应数量的颜色,保证每个离散值颜色唯一且有渐变逻辑。

示例代码:

import plotly.express as px
import pandas as pd

df = pd.DataFrame({
    'category': [f'分类_{i}' for i in range(25)],
    '数值': [i*3 for i in range(25)]
})

# 获取唯一分类数量
unique_cat_count = len(df['category'].unique())
# 从Viridis色阶中采样对应数量的颜色
sampled_colors = px.colors.sample_colorscale(
    'Viridis', 
    [n/(unique_cat_count-1) for n in range(unique_cat_count)]
)

fig = px.bar(df, x='category', y='数值', color='category',
             color_discrete_sequence=sampled_colors)
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:18