4. 晶圆图良率分布绘制

任务说明

给定每片晶圆的芯片坐标 (die_x, die_y) 与合格标记 pass,绘制晶圆图:合格芯片与不合格芯片用不同颜色标出,直观呈现空间分布。本案例用 matplotlib 完成绘制,并输出每片晶圆的良率。

环境依赖

pip install matplotlib

数据结构与绘制流程

晶圆坐标数据 (die_x, die_y, pass) 按 pass 分组 合格 / 不合格 scatter 绘制 绿=合格 红=不合格

完整代码

import matplotlib.pyplot as plt

# 模拟一片晶圆的坐标数据: (die_x, die_y, pass)
# pass=True 合格, pass=False 不合格
wafer = [
    (0, 0, True), (1, 0, True), (2, 0, False), (3, 0, True),
    (0, 1, True), (1, 1, True), (2, 1, True), (3, 1, False),
    (0, 2, False), (1, 2, True), (2, 2, True), (3, 2, True),
    (0, 3, True), (1, 3, False), (2, 3, True), (3, 3, True),
]

def plot_wafer(data, title="Wafer Map"):
    """绘制晶圆图: 合格绿色, 不合格红色"""
    ok_x = [x for x, y, p in data if p]
    ok_y = [y for x, y, p in data if p]
    ng_x = [x for x, y, p in data if not p]
    ng_y = [y for x, y, p in data if not p]

    fig, ax = plt.subplots(figsize=(5, 5))
    ax.scatter(ok_x, ok_y, c="green", marker="s", s=200, label="Pass")
    ax.scatter(ng_x, ng_y, c="red", marker="s", s=200, label="Fail")

    total = len(data)
    passed = len(ok_x)
    yield_pct = passed / total * 100
    ax.set_title(f"{title}  Yield={yield_pct:.1f}%")
    ax.set_xlabel("die_x")
    ax.set_ylabel("die_y")
    ax.set_xticks(range(min(x for x, y, p in data), max(x for x, y, p in data) + 1))
    ax.set_yticks(range(min(y for x, y, p in data), max(y for x, y, p in data) + 1))
    ax.grid(True, linestyle="--", alpha=0.4)
    ax.legend()
    plt.tight_layout()
    plt.savefig("wafer_map.png", dpi=100)
    plt.show()
    return yield_pct

if __name__ == "__main__":
    y = plot_wafer(wafer)
    print(f"良率: {y:.1f}%")

运行与验证

  1. 运行 python wafer_map.py,脚本会弹出图形窗口并保存 wafer_map.png。
  2. 观察图中绿色方块(合格)与红色方块(不合格)是否按坐标正确分布。
  3. 控制台输出良率。本案例 16 颗芯片中 12 颗合格,预期输出 良率: 75.0%,与图中绿色方块数量一致即通过。