如何让Plotly柱状图基于Category列实现分组?
解决方案:基于Category分组的Plotly柱状图(保留Value颜色映射)
需求说明
现有代码可根据Value列设置柱状图颜色,但需要将柱状图改为基于Category列分组,同时保持颜色映射规则不变。
修改后的完整代码
from plotly import graph_objects as go import pandas as pd # 原始数据集 challenge_count_df = pd.DataFrame({'Challenge': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], 'Count' : [32, 22, 40, 12, 10, 60, 32, 22, 44, 90], 'Value' : ["0","5","10","15","5","10","5","10","15","10"], 'Category' : [1,2,3,4, 4, 2, 1, 3, 2, 2]}) # 颜色映射字典 colors = { 'background': '#111111', 'text': 'teal', "0":"silver", "10":"#FBEC5D", "5":"#50C878", "15":"#A23D60" } fig = go.Figure() # 按Category分组生成柱状图,颜色由Value决定 for cat in challenge_count_df['Category'].unique(): # 筛选当前Category的子数据集 df_cat = challenge_count_df[challenge_count_df['Category'] == cat] # 将Value映射为对应的颜色 bar_colors = df_cat['Value'].map(colors) fig.add_trace(go.Bar( x=df_cat['Challenge'], y=df_cat['Count'], customdata=df_cat['Category'], name=f"Category {cat}", marker_color=bar_colors )) # 设置柱状图分组模式 fig.update_layout(barmode='group') # 可选:应用背景和文本颜色配置 fig.update_layout( plot_bgcolor=colors['background'], paper_bgcolor=colors['background'], font_color=colors['text'] ) fig.show()
关键改动说明
- 分组逻辑调整:将循环对象从
Value的唯一值改为Category的唯一值,确保每个Category作为独立的分组轨迹 - 颜色映射保留:通过
df_cat['Value'].map(colors)将每个Challenge的Value值映射到预设颜色,完全保留原颜色规则 - 数据匹配修正:将
customdata改为当前子数据集的Category,避免跨trace的数据不匹配问题 - 布局保持一致:保留原有的
barmode='group'设置,同时可选添加原定义的背景和文本颜色配置
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

