Plotly分组柱状图颜色异常:正负值配色及分组图例修正
解决分组柱状图配色与图例不一致问题
问题分析
原代码通过fig.update_traces直接给所有柱子设置统一颜色列表,导致不同分组的trace共享同一套颜色规则,图例颜色被统一覆盖,无法区分分组。
修正代码
import pandas as pd import numpy as np import plotly.express as px df = pd.DataFrame( { "x" : [1,2,3], "group1" : [np.nan, 1, -0.5], "group2" : [np.nan, -0.2, 1], }).set_index("x") df_ = df.reset_index().melt(id_vars='x') fig = px.bar(df_, x='x', y='value', color='variable', barmode='group') # 逐个处理每个分组的trace,设置对应颜色 for i, trace in enumerate(fig.data): # 获取当前分组的数值数据 group_vals = df_[df_['variable'] == trace.name]['value'] # 根据正负值生成颜色列表 trace.marker.color = ['red' if val < 0 else 'green' for val in group_vals] # 配置柱子边框样式 trace.marker.line.color = 'black' trace.marker.line.width = 1.5 fig.show()
修正说明
- 遍历
fig.data中的每个trace(对应一个分组),为每个分组单独生成颜色列表,确保颜色与自身分组的数值对应 - 每个分组的图例颜色会自动取该分组第一个非NaN数值对应的颜色,实现分组区分
- 保留柱子黑色边框的样式要求
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

