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

Python Plotly多指标堆叠柱状图指标未分离问题求解

问题原因

现有代码中所有柱迹的x轴直接绑定日期字段,Plotly会将相同x值的柱归为同一集合,按barmode='stack'规则执行堆叠,因此Active、Completed两个指标的数值会被累加到同一根柱上,无法拆分出两组独立柱。

正确实现方案

要实现「每个日期下分Active、Completed两组独立堆叠柱」的效果,核心是通过offsetgroup参数给两类指标的柱设置分组标识:同指标的柱设置相同的offsetgroup值,组内按堆叠规则展示;不同指标组的柱会在同一x轴刻度下并排排列,配合barmode='stack'即可实现分组堆叠效果,同时需要处理图例重复显示的问题。

完整可运行代码如下:

import plotly.graph_objects as go
import pandas as pd

# 构造样例数据
df = pd.DataFrame([
    ["2022-06-01", "Job1", 3, 2],
    ["2022-06-01", "Job2", 5, 1],
    ["2022-06-02", "Job1", 4, 3],
    ["2022-06-02", "Job2", 6, 4],
    ["2022-06-03", "Job1", 5, 5],
    ["2022-06-03", "Job2", 3, 1]
], columns=["Date", "Job", "Active", "Completed"])

fig = go.Figure()
colors = ['#0b215c','#4d256c','#812571','#af286d','#d6385f','#f1564a','#ff7c30','#ffa600']
job_groups = df['Job'].unique()

# 绘制Active组堆叠柱
for job, color in zip(job_groups, colors):
    df_job = df[df['Job'] == job]
    fig.add_trace(go.Bar(
        x=df_job['Date'],
        y=df_job['Active'],
        name=job,
        marker_color=color,
        offsetgroup='active',
        legendgroup=job,
        showlegend=True
    ))

# 绘制Completed组堆叠柱
for job, color in zip(job_groups, colors):
    df_job = df[df['Job'] == job]
    fig.add_trace(go.Bar(
        x=df_job['Date'],
        y=df_job['Completed'],
        name=job,
        marker_color=color,
        offsetgroup='completed',
        legendgroup=job,
        showlegend=False
    ))

# 可选:给两组柱添加分类标注
fig.add_annotation(
    x='2022-06-01', y=12, text='Active', showarrow=False,
    xanchor='center', yanchor='bottom', offsetx=-40
)
fig.add_annotation(
    x='2022-06-01', y=12, text='Completed', showarrow=False,
    xanchor='center', yanchor='bottom', offsetx=40
)

fig.update_layout(
    barmode='stack',
    bargap=0.3,
    bargroupgap=0.15
)

fig.show()
关键参数说明
  • offsetgroup:核心分组参数,相同值的柱迹会被归为同一组,组内按barmode规则堆叠,不同组的柱会在同一x刻度下并排排列
  • legendgroup:将同Job的Active、Completed柱绑定为同一图例组,点击图例时两类柱的对应分段会同步显示/隐藏
  • bargap:控制不同日期间柱子的间距,取值范围0-1
  • bargroupgap:控制同日期下两组堆叠柱的间距,取值范围0-1,可根据展示需求自行调整数值

内容的提问来源于stack exchange,提问作者Ihor Koropetskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:57:51