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

Plotly Express散点图:如何强制每条曲线颜色唯一并扩展颜色映射?

解决Plotly Express散点图多类别颜色/符号重复问题

扩展默认离散颜色映射

Plotly Express默认的离散色阶(比如plotly内置系列)仅包含10种唯一颜色,类别超过10个就会循环重复。可以通过两种方式扩展颜色映射:

  • 直接使用多色质化色阶:Plotly提供了预定义的多类别色阶,比如Dark24包含24种不同颜色,足以覆盖多数场景,直接指定即可:

    import plotly.express as px
    import pandas as pd
    
    # 生成20个类别的测试数据
    df = pd.DataFrame({
        "x": range(20),
        "y": range(20),
        "category": [f"Cat_{i}" for i in range(20)]
    })
    
    fig = px.scatter(df, x="x", y="y", color="category",
                     color_discrete_sequence=px.colors.qualitative.Dark24)
    fig.show()
    
  • 从连续色阶采样生成离散色:如果需要更多颜色,可以从连续色阶(如Viridis、Plasma)中采样出对应数量的颜色:

    # 从Viridis色阶采样20种颜色
    custom_colors = px.colors.sample_colorscale("Viridis", [n/(20-1) for n in range(20)])
    fig = px.scatter(df, x="x", y="y", color="category",
                     color_discrete_sequence=custom_colors)
    fig.show()
    

结合符号区分的正确做法

默认情况下仅指定color参数,符号不会自动绑定类别。要实现每个类别对应唯一颜色+符号,需同时指定symbol参数,并自定义足够多的符号序列:

# 自定义符号列表(包含20种不同符号)
custom_symbols = ["circle", "square", "diamond", "cross", "x", "triangle-up", 
                  "triangle-down", "triangle-left", "triangle-right", "pentagon",
                  "hexagon", "star", "hexagram", "octagon", "diamond-tall", 
                  "diamond-wide", "hourglass", "bowtie", "asterisk", "hash"]

fig = px.scatter(df, x="x", y="y", color="category", symbol="category",
                 color_discrete_sequence=px.colors.qualitative.Dark24,
                 symbol_sequence=custom_symbols)
fig.show()

额外提示

如果类别数量超过30,单纯依赖颜色和符号区分会变得困难,建议结合以下方式优化:

  • 使用facet_col/facet_row将数据分面展示
  • 开启悬停交互,通过悬停提示显示类别详细信息
  • 组合多个质化色阶(如Dark24 + px.colors.qualitative.Set3)生成更多颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:57:11