如何控制Plotly柱状图柱形颜色重复并自定义配色列表
问题原因
Plotly 内置默认离散配色盘仅包含10种基础颜色,分组柱状图序列数量超过10个时,会循环复用默认颜色,导致同色重复。
实现方案
在遍历生成柱状图序列时,为每个序列单独绑定自定义配色即可,原有数据处理逻辑无需改动。
- 先定义自定义颜色列表,色值支持十六进制、RGB/RGBA、Plotly内置命名色格式,可按需调整:
# 自定义配色,可根据实际分组数量扩充,示例为15色扩展配色 custom_colors = [ '#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf', '#aec7e8', '#ffbb78', '#98df8a', '#ff9896', '#c5b0d5' ]
- 修改原有柱状图序列生成逻辑,为每个序列指定对应颜色:
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
相关产品推荐
相关产品推荐

