4. 晶圆图良率分布绘制
任务说明
给定每片晶圆的芯片坐标 (die_x, die_y) 与合格标记 pass,绘制晶圆图:合格芯片与不合格芯片用不同颜色标出,直观呈现空间分布。本案例用 matplotlib 完成绘制,并输出每片晶圆的良率。
环境依赖
pip install matplotlib
数据结构与绘制流程
完整代码
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}%")
运行与验证
- 运行
python wafer_map.py,脚本会弹出图形窗口并保存wafer_map.png。 - 观察图中绿色方块(合格)与红色方块(不合格)是否按坐标正确分布。
- 控制台输出良率。本案例 16 颗芯片中 12 颗合格,预期输出
良率: 75.0%,与图中绿色方块数量一致即通过。