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

如何控制Plotly柱状图柱形颜色重复并自定义配色列表

问题原因

Plotly 内置默认离散配色盘仅包含10种基础颜色,分组柱状图序列数量超过10个时,会循环复用默认颜色,导致同色重复。

实现方案

在遍历生成柱状图序列时,为每个序列单独绑定自定义配色即可,原有数据处理逻辑无需改动。

  1. 先定义自定义颜色列表,色值支持十六进制、RGB/RGBA、Plotly内置命名色格式,可按需调整:
# 自定义配色,可根据实际分组数量扩充,示例为15色扩展配色
custom_colors = [
    '#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
    '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf',
    '#aec7e8', '#ffbb78', '#98df8a', '#ff9896', '#c5b0d5'
]
  1. 修改原有柱状图序列生成逻辑,为每个序列指定对应颜色:
df = common_helpers.get_dataframe_in_period(df, options)
if "All" not in options["clinic_nurse"]:
   df = df[df["nurse_name"].isin(options["clinic_nurse"])]
per = df.index_date.dt.to_period(options["groupby"]).astype(str)
count = df.pivot_table(
        index=per, columns="nurse_name", values="patient_count", aggfunc="sum"
    ).fillna(0)

data = []
# 遍历分组列时同步匹配对应位置的颜色
for idx, col in enumerate(count.columns):
    # 取模逻辑保证即使颜色列表长度小于分组数,也不会抛出索引错误
    bar_color = custom_colors[idx % len(custom_colors)]
    data.append(go.Bar(
        name=col, 
        x=count.index, 
        y=count[col],
        marker_color=bar_color
    ))
fig = go.Figure(data)
# 按需配置柱状图模式,分组模式用barmode='group',堆叠模式用barmode='stack'
# fig.update_layout(barmode='group')
注意事项
  • 若需要完全避免颜色重复,只需保证custom_colors列表长度大于等于实际分组数(即len(count.columns))即可。
  • 该方案不需要额外引入第三方依赖,通过Plotly原生接口即可实现全量自定义配色控制。
  • 取模写法idx % len(custom_colors)可以兼容颜色列表长度小于分组数的场景,不会触发索引报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:00:54