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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:01:36