Python绘制X-bar图和R图 | 统计过程控制SPC

X-bar图和R图是用于统计过程控制(SPC)的两种常用工具,用于监测过程的平均值和范围(变异性)。这些图有助于识别过程中的变化和异常,以便及时采取纠正措施。

**X-bar图(平均值控制图)**显示了一系列样本的平均值,用于监测过程的平均值是否保持在可接受的范围内。X-bar图通常由以下几个要素组成:

  1. 样本平均值:每个样本的数据点的平均值,通常用于每个样本的数据集。

  2. 中心线:通常是所有样本平均值的平均值,表示过程的目标值。

  3. 控制限:通常包括上限控制限和下限控制限,用于指示过程平均值的可接受范围。控制限的计算方法可以根据需求不同而有所不同,常用的方法包括使用标准偏差和样本大小。

  4. 数据点:每个样本的平均值在X-bar图上以数据点的形式表示,通常用线连接这些数据点以显示趋势。

**R图(范围控制图)**显示了一系列样本的范围(最大值和最小值之间的差异),用于监测过程的变异性。R图通常由以下几个要素组成:

  1. 范围(R):每个样本的最大值和最小值之间的差异。

  2. 中心线:通常是所有R值的平均值,表示过程的变异性目标。

  3. 控制限:通常包括上限控制限,用于指示R值的可接受范围。控制限的计算方法可以根据需求不同而有所不同,常用的方法包括使用标准偏差和样本大小。

  4. 数据点:每个样本的R值在R图上以数据点的形式表示,通常用线连接这些数据点以显示趋势。

在绘制X-bar图和R图之前,需要进行以下步骤:

  1. 收集样本数据并确定样本大小和采样频率。

  2. 计算每个样本的平均值(X-bar图)和范围(R图)。

  3. 计算X-bar图和R图的中心线和控制限。

  4. 绘制X-bar图和R图,并将样本数据点与中心线和控制限一起显示。

要生成表格数据并写入文件,然后读取数据并计算X-bar图和R图所需的平均值、标准差等,您可以按照以下步骤进行操作。首先,确保您已经安装了NumPy、matplotlib和Pandas库。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文标签乱码,还有通过导入字体文件的方法
plt.rcParams['axes.unicode_minus'] = False# 生成随机数据,例如,生成5个样本,每个样本5个数据点
data = np.random.rand(5, 5)# 创建一个Pandas DataFrame
df = pd.DataFrame(data, columns=['Sample 1', 'Sample 2', 'Sample 3', 'Sample 4', 'Sample 5'])# 将数据写入CSV文件
df.to_csv('sample_data.csv', index=False)# 从CSV文件读取数据
df = pd.read_csv('sample_data.csv')# 打印数据框的前几行以确保数据已成功加载
print(df.head())
# 计算每个样本的平均值
x_bar = df.mean(axis=1)# 计算每个样本的范围(R)
R = df.max(axis=1) - df.min(axis=1)# 计算平均值和R的平均值
x_bar_avg = x_bar.mean()
R_avg = R.mean()# 计算X-bar图的控制限(通常为平均值的上下控制限)
x_bar_upper_limit = x_bar_avg + 0.577 * R_avg
x_bar_lower_limit = x_bar_avg - 0.577 * R_avg# 计算R图的控制限(通常为R的上限)
R_upper_limit = R_avg * 2.114# 打印计算结果
print(f'X-bar平均值: {x_bar_avg}')
print(f'R平均值: {R_avg}')
print(f'X-bar控制限: ({x_bar_lower_limit}, {x_bar_upper_limit})')
print(f'R控制限: {R_upper_limit}')# 绘制X-bar图
plt.figure(figsize=(10, 6))
plt.plot(x_bar, marker='o', linestyle='-')
plt.axhline(y=x_bar_avg, color='r', linestyle='--', label='平均值')
plt.axhline(y=x_bar_upper_limit, color='g', linestyle='--', label='控制限')
plt.axhline(y=x_bar_lower_limit, color='g', linestyle='--')
plt.title('X-bar图')
plt.xlabel('样本编号')
plt.ylabel('平均值')
plt.legend()
plt.grid()
plt.show()# 绘制R图
plt.figure(figsize=(10, 6))
plt.plot(R, marker='o', linestyle='-')
plt.axhline(y=R_avg, color='r', linestyle='--', label='平均值')
plt.axhline(y=R_upper_limit, color='g', linestyle='--', label='控制限')
plt.title('R图')
plt.xlabel('样本编号')
plt.ylabel('范围 (R)')
plt.legend()
plt.grid()
plt.show()#    Sample 1  Sample 2  Sample 3  Sample 4  Sample 5
# 0  0.341066  0.113474  0.924694  0.877339  0.257942
# 1  0.659984  0.817222  0.555201  0.529651  0.241852
# 2  0.093103  0.897216  0.900418  0.633101  0.339030
# 3  0.349210  0.725956  0.897110  0.887086  0.779876
# 4  0.642032  0.084140  0.161629  0.898554  0.606429
# X-bar平均值: 0.568532531479609
# R平均值: 0.7112440409136231
# X-bar控制限: (0.1581447198724485, 0.9789203430867696)
# R控制限: 1.5035699024913993

 

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文标签乱码,还有通过导入字体文件的方法
plt.rcParams['axes.unicode_minus'] = False# 假设您已经有了样本数据,存储在x_bar_values和R_values中# 计算中心线和控制限
x_bar_centerline = np.mean(x_bar_values)
R_centerline = np.mean(R_values)
R_bar = np.mean(R_values)# 计算控制限(通常使用常见的控制图常数,如A2,D3,D4)
A2 = 0.729
D3 = 0
D4 = 2.282
x_bar_UCL = x_bar_centerline + A2 * R_bar
x_bar_LCL = x_bar_centerline - A2 * R_bar
R_UCL = D4 * R_bar
R_LCL = D3 * R_bar# 绘制X-bar图
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(x_bar_values, marker='o', linestyle='-')
plt.axhline(y=x_bar_centerline, color='r', linestyle='--', label='中心线')
plt.axhline(y=x_bar_UCL, color='g', linestyle='--', label='上限控制限')
plt.axhline(y=x_bar_LCL, color='g', linestyle='--', label='下限控制限')
plt.title('X-bar图')
plt.xlabel('样本编号')
plt.ylabel('平均值')
plt.legend()
plt.grid()# 绘制R图
plt.subplot(2, 1, 2)
plt.plot(R_values, marker='o', linestyle='-')
plt.axhline(y=R_centerline, color='r', linestyle='--', label='中心线')
plt.axhline(y=R_UCL, color='g', linestyle='--', label='上限控制限')
plt.title('R图')
plt.xlabel('样本编号')
plt.ylabel('范围 (R)')
plt.legend()
plt.grid()plt.tight_layout()
plt.show()

这段代码将生成X-bar图和R图,帮助您监控过程的平均值和范围,以便识别任何过程中的异常或变化。请根据您的数据和需求进行适当的修改。在实际应用中,您可能需要根据标准和过程的特性来调整控制限和常数。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139156.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pcl--第十二节 2D和3D融合和手眼标定

2D&3D融合 概述 截止目前为止,我们学习了机器人学,学习了2D和3D视觉算法。我们也学习了2D相机(图像数据的来源)和3D相机(点云数据的来源)工作原理。 实际上,我们最终要做的,是一个手眼机器人系统。在这个系统里&#xff0c…

zookeeper + kafka

Zookeeper 概述 Zookeeper是一个开源的分布式服务管理框架。存储业务服务节点元数据及状态信息,并负责通知再 ZooKeeper 上注册的服务几点状态给客户端 Zookeeper 工作机制 Zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架&…

微信小程序底部安全区域高度获取

CSS 属性 safe-area-inset-bottom safe-area-inset-bottom 就是安全区的高度 padding-bottom:env(safe-area-inset-bottom); wx.getSystemInfoSync() wx.getSystemInfoSync()可以获取系统信息 let system wx.getSystemInfoSync() let bottomSafe system.screenHeight -…

yolov5使用最新MPDIOU损失函数,有效和准确的边界盒回归的损失,优于GIoU/EIoU/CIoU/EIoU(附代码可用)

文章目录 1. 论文1.1. 主要目的1.2. 设计思路2 代码3.总结1. 论文 MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression (一个有效和准确的边界框损失回归函数) 论文地址 1.1. 主要目的 当预测框与边界框具有相同的纵横比,但宽度和高度值完全不同时,大多数…

【湖科大教书匠】计算机网络随堂笔记第1章(计算机网络概述)

目录 1.1、计算机网络在信息时代的作用 我国互联网发展状况 1.2、因特网概述 1、网络、互连网(互联网)和因特网 2、因特网发展的三个阶段 因特网服务提供者ISP(Internet Service Provider) 基于ISP的三层结构的因特网 3、因特网的标准化工作 4、因特网的…

2023华为杯数学建模D题——碳排放路径优化基于指数分解法的LMDI 模型

LMDI 模型是基于指数分解法(IDA) 发展而成的一种因素分解法。LMDI模型在 Kaya 拓展式的基础上, 利用对数平均法对影响因素进行分析。 综合比较其他的指数分解方法, LMDI 分解法有着可完全分解因子、 无残差项等优势。根据对 Kaya …

Xamarin.Android实现App内版本更新

目录 1、具体的效果2、代码实现2.1 基本原理2.2 开发环境2.3 具体代码2.3.1 基本设置2.3.2 系统的权限授予2.3.3 进度条的layout文件2.3.4 核心的升级文件 3、代码下载4、知识点5、参考文献 1、具体的效果 有事需要在程序内集成自动更新的功能,网上找了下&#xff…

企业级数据仓库-理论知识

D3 AM 大数据中间件 Hive:将SQL转化成分布式Map/Reduce进行运算,也支持转换成Spark,需要单独安装Hive集群才能访问Spark,支持60%的SQL,延迟比较大。SparkSQL:属于Spark生态圈,Hive on Sqark。HBase: NoSQL,高并发读,适…

thinkphp8路由

thinkphp8已出来有好一段时间了。这些天闲来无事,研究了下tp8的路由。默认情况下,tp8的路由是在route\app.php的文件里。但在实际工作中,我们并不会这样子去写路由。因为这样不好管理。更多的,是通过应用级别去管理路由。假如项目…

设计模式之解释器模式

一、定义 1、定义 Given a language,define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.(给定一门语言,定义它的语法的一种表示,并定义一个解释器&…

Winform直接与Wpf交互

Winform项目中,可以直接使用wpf中的自定义控件和窗体 测试环境: vistual studio 2017 window 10 一 winform直接使用wpf的自定义控件 步骤如下: 1 新建winfrom项目,名为WinFormDemo,默认有一个名为Form1的窗体…

【GAMES103】基于物理的计算机动画入门(1)前置的基础数学知识

GAMES103: 基于物理的计算机动画入门 链接:GAMES103 1. 坐标系的划分 在游戏引擎中分为右手和左手坐标系,区分的依据是什么? 上图可以看到如果是左手坐标系,那么所有的物体都在屏幕后面,意味着x,y&#x…

物联网的未来:连接的智能世界

物联网(IoT)是引领我们走向未来的一项关键技术。它让物品通过互联网进行连接,交流,开创了智能生活新时代。预计到2025年,全球将拥有超过410亿的IoT设备。在对人类生活的每个方面产生影响的同时,物联网也正在…

2023华为杯研究生数学建模竞赛CDEF题思路+模型代码

全程更新华为杯研赛CDEF题思路模型及代码,大家查看文末名片获取 华为杯C题思路分析 问题一 在每个评审阶段,作品通常都是随机分发的,每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性,不同专家评审的作…

【kafka实战】03 SpringBoot使用kafka生产者和消费者示例

本节主要介绍用SpringBoot进行开发时&#xff0c;使用kafka进行生产和消费 一、引入依赖 <dependencies><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><depen…

zabbix自定义监控、钉钉、邮箱报警

目录 一、实验准备 二、安装 三、添加监控对象 四、添加自定义监控项 五、监控mariadb 1、添加模版查看要求 2、安装mariadb、创建用户 3、创建用户文件 4、修改监控模版 5、在上述文件中配置路径 6、重启zabbix-agent验证 六、监控NGINX 1、安装NGINX&#xff0c…

207.Flink(二):架构及核心概念,flink从各种数据源读取数据,各种算子转化数据,将数据推送到各数据源

一、Flink架构及核心概念 1.系统架构 JobMaster是JobManager中最核心的组件,负责处理单独的作业(Job)。一个job对应一个jobManager 2.并行度 (1)并行度(Parallelism)概念 一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。这样,包含并行子任…

实验五 熟悉 Hive 的基本操作

实验环境&#xff1a; 1.操作系统&#xff1a;CentOS 7。 2.Hadoop 版本&#xff1a;3.3.0。 3.Hive 版本&#xff1a;3.1.2。 4.JDK 版本&#xff1a;1.8。 实验内容与完成情况&#xff1a; &#xff08;1&#xff09;创建一个内部表 stocks&#xff0c;字段分隔符为英文逗号…

爬虫 — Scrapy 框架(一)

目录 一、介绍1、同步与异步2、阻塞与非阻塞 二、工作流程三、项目结构1、安装2、项目文件夹2.1、方式一2.2、方式二 3、创建项目4、项目文件组成4.1、piders/__ init __.py4.2、spiders/demo.py4.3、__ init __.py4.4、items.py4.5、middlewares.py4.6、pipelines.py4.7、sett…

BOM与DOM--记录

BOM基础&#xff08;BOM简介、常见事件、定时器、this指向&#xff09; BOM和DOM的区别和联系 JavaScript的DOM与BOM的区别与用法详解 DOM和BOM是什么&#xff1f;有什么作用&#xff1f; 图解BOM与DOM的区别与联系 BOM和DOM详解 JavaScript 中的 BOM&#xff08;浏览器对…