给出示例,用python画出Xbar-R控制图,并根据8种控制图的判异规则判断数据是否有异常,输出是否异常的结论。
时间: 2024-09-12 09:13:55 浏览: 63
QCChart3DNetDemo.zip_DEMO_spc_xbar-r_控制图_过程控制
要使用Python绘制Xbar-R控制图,我们可以使用matplotlib库来进行绘图,并用numpy库进行计算。下面我将给出一个简单的示例代码,这个示例基于模拟数据来生成Xbar-R控制图,并根据常见的控制图判异规则进行简单的异常判断。
首先,我们需要导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
然后,我们需要生成一些模拟数据,例如,我们有一组数据,每组包含5个子组,每个子组有4个观测值:
```python
# 模拟数据
data = [
[18, 17, 19, 17],
[14, 16, 14, 15],
[17, 15, 18, 16],
[19, 20, 19, 18],
[16, 17, 15, 16],
[18, 17, 19, 18],
[15, 16, 15, 14],
[17, 18, 16, 17],
[19, 17, 18, 19],
[16, 15, 17, 16]
]
# 计算每个子组的平均值和范围
subgroup_means = np.array([np.mean(subgroup) for subgroup in data])
subgroup_ranges = np.array([np.max(subgroup) - np.min(subgroup) for subgroup in data])
# 计算所有子组的平均值和整体范围的平均值
xbar_mean = np.mean(subgroup_means)
r_mean = np.mean(subgroup_ranges)
```
接下来,绘制Xbar-R控制图:
```python
# 设置控制限,这里使用默认的控制限因子,实际情况可能需要根据数据调整
sigma_factor = 3 # 通常控制限的因子是3
ucl_xbar = xbar_mean + sigma_factor * r_mean / np.sqrt(len(data[0]))
lcl_xbar = xbar_mean - sigma_factor * r_mean / np.sqrt(len(data[0]))
ucl_r = sigma_factor * np.mean(subgroup_ranges)
lcl_r = sigma_factor * np.mean(subgroup_ranges)
# 绘制Xbar图
plt.figure(figsize=(10, 5))
plt.plot(subgroup_means, 'bo-', markersize=10)
plt.axhline(y=ucl_xbar, color='r', linestyle='--')
plt.axhline(y=lcl_xbar, color='r', linestyle='--')
plt.title('Xbar Control Chart')
plt.ylabel('Average')
plt.xlabel('Subgroup Number')
# 绘制R图
plt.figure(figsize=(10, 5))
plt.plot(subgroup_ranges, 'ro-')
plt.axhline(y=ucl_r, color='g', linestyle='--')
plt.axhline(y=lcl_r, color='g', linestyle='--')
plt.title('R Control Chart')
plt.ylabel('Range')
plt.xlabel('Subgroup Number')
plt.show()
```
判断数据是否有异常:
```python
# 异常判断:如果任何点超过了控制限,则认为存在异常
xbar_outliers = np.any(subgroup_means > ucl_xbar) or np.any(subgroup_means < lcl_xbar)
r_outliers = np.any(subgroup_ranges > ucl_r) or np.any(subgroup_ranges < lcl_r)
# 输出是否异常的结论
xbar_conclusion = 'Xbar control chart is normal.' if not xbar_outliers else 'Xbar control chart is out of control.'
r_conclusion = 'R control chart is normal.' if not r_outliers else 'R control chart is out of control.'
print(xbar_conclusion)
print(r_conclusion)
```
请注意,上述代码中的控制限因子默认使用了3倍标准差的规则,但实际应用中可能需要根据特定的过程能力指数(Cp、Cpk等)或者历史数据来确定具体的控制限。
阅读全文