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

技术问询:能否用Plotly制作分组堆叠条形图展示各站点良率?

使用Plotly实现分组堆叠条形图展示站点良率

完全可以用Plotly实现分组堆叠条形图,这种图表能完美匹配你的需求——在同一视图中清晰对比不同站点的True Yield(真实良率)和First Pass Yield(首次通过良率),通过分组与堆叠的组合,既能区分不同分类维度,又能展示指标的构成关系。

下面提供两种场景的实现代码:

场景1:带额外分组维度的分组堆叠条形图

如果你的数据存在额外分类维度(比如产品线),需要每个大分组下的站点对应堆叠的两个良率指标,可以用以下代码实现:

import plotly.graph_objects as go

# 模拟业务数据
sites = ["Site A", "Site B", "Site C"]
product_lines = ["Line 1", "Line 2"]
# 真实良率:[[SiteA-Line1, SiteA-Line2], [SiteB-Line1, SiteB-Line2], ...]
true_yield_data = [[85, 90], [88, 92], [91, 87]]
# 首次通过良率:结构同上
first_pass_yield_data = [[78, 82], [80, 85], [83, 79]]

# 配置分组间距与条形宽度
group_gap = 0.3
bar_width = (1 - group_gap) / len(product_lines)

fig = go.Figure()

# 为每条产品线添加堆叠条形
for idx, line in enumerate(product_lines):
    # 计算当前产品线条形的x轴偏移位置
    x_positions = [site_idx + idx * bar_width for site_idx in range(len(sites))]
    
    # 添加真实良率条形
    fig.add_trace(go.Bar(
        x=x_positions,
        y=[row[idx] for row in true_yield_data],
        name=f"{line} - 真实良率",
        width=bar_width,
        marker_color="#1f77b4" if idx == 0 else "#ff7f0e"
    ))
    
    # 添加首次通过良率条形(堆叠在真实良率上方)
    fig.add_trace(go.Bar(
        x=x_positions,
        y=[row[idx] for row in first_pass_yield_data],
        name=f"{line} - 首次通过良率",
        width=bar_width,
        marker_color="#aec7e8" if idx == 0 else "#ffbb78",
        base=[row[idx] for row in true_yield_data]
    ))

# 优化图表布局
fig.update_layout(
    title="各站点产品线良率对比(分组堆叠条形图)",
    xaxis=dict(
        tickmode="array",
        tickvals=[site_idx + bar_width*(len(product_lines)-1)/2 for site_idx in range(len(sites))],
        ticktext=sites,
        title="站点"
    ),
    yaxis=dict(title="良率 (%)", range=[0, 100]),
    barmode="stack",
    legend_title="指标类型",
    margin=dict(l=40, r=40, t=60, b=40)
)

fig.show()

场景2:单分组堆叠条形图(仅站点维度)

如果不需要额外分组维度,仅需展示每个站点下两个良率的堆叠对比,用Plotly Express可以快速实现:

import plotly.express as px
import pandas as pd

# 将数据整理为长格式(Plotly Express推荐格式)
yield_data = pd.DataFrame({
    "站点": ["Site A", "Site A", "Site B", "Site B", "Site C", "Site C"],
    "良率类型": ["真实良率", "首次通过良率"] * 3,
    "良率值": [85, 78, 88, 80, 91, 83]
})

fig = px.bar(
    yield_data,
    x="站点",
    y="良率值",
    color="良率类型",
    barmode="stack",
    title="各站点良率对比(堆叠条形图)",
    labels={"良率值": "良率 (%)"},
    color_discrete_map={
        "真实良率": "#1f77b4",
        "首次通过良率": "#aec7e8"
    }
)

# 固定y轴范围,确保良率百分比展示更直观
fig.update_layout(yaxis_range=[0, 100])
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:16