dtcms模板 intellij idea汉化 idea 常用快捷键 Netty elasticsearch notifications stream tinymce jq绑定click事件 jq点击事件 docker查看所有容器 react python运算 java访问数据库 javarandom java集合类 java集合框架图 离散数学及其应用 redis入门指南 dvwa安装教程 labview宝典 云管家 js日期格式化 qq钱包实名认证 小洛快跑 list删除指定元素 大数据之路 winsxs可以删除吗 例外被抛出且未被接住 汇通启富下载 套料软件 小米开发者选项 win10工作组 img转iso xp系统修复工具 dos常用命令 12123客服 wow伤害数字 哔哩哔哩后台播放 弹窗广告去除拦截方法
当前位置: 首页 > 学习教程  > python

SPC - 用pandas和matplotlib画X-bar chart

2021/2/6 22:25:16 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

anniehan333 问到怎么用Python画分组的X-bar控制图,题目如下:(来自她正在编写的书籍) 这是她用MiniTab画的图: 以下是Python实现过程: 主要是用pandas的groupby来实现分组子图 代码整合: im…

@anniehan333 问到怎么用Python画分组的X-bar控制图,题目如下:(来自她正在编写的书籍)

这是她用MiniTab画的图:

以下是Python实现过程:

主要是用pandas的groupby来实现分组子图

代码整合:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


"""字典形式导入数据"""
x1 = {'Measure_1': [28.4,28.9,29.0,28.4,28.6], 
      'Measure_2': [28.4,29.0,29.1,28.5,28.6], 
      'Measure_3': [28.4,29.0,29.1,28.5,28.6]}   # A测定员
x2 = {'Measure_1': [28.5,28.8,29.0,28.5,28.6], 
      'Measure_2': [28.4,28.9,29.0,28.5,28.6], 
      'Measure_3': [28.4,28.8,29.0,28.5,28.6]}   # B测定员
x3 = {'Measure_1': [28.4,28.9,28.9,28.4,28.6], 
      'Measure_2': [28.5,28.9,28.9,28.5,28.7], 
      'Measure_3': [28.5,28.9,29.0,28.4,28.7]}   # C测定员


"""数据转换成DataFrame存储方便画图"""
df1 = pd.DataFrame(x1)
x1_bar = df1.mean().mean()
R1 = (df1.max(axis=1) - df1.min(axis=1)).sum()/5
df1['sample_no'] = ['#'+str(i) for i in range(1,6)]
df1['researcher'] = 'A'

df2 = pd.DataFrame(x2)
x2_bar = df2.mean().mean()
R2 = (df2.max(axis=1) - df2.min(axis=1)).sum()/5
df2['sample_no'] = ['#'+str(i) for i in range(1,6)]
df2['researcher'] = 'B'

df3 = pd.DataFrame(x3)
x3_bar = df3.mean().mean()
R3 = (df3.max(axis=1) - df3.min(axis=1)).sum()/5
df3['sample_no'] = ['#'+str(i) for i in range(1,6)]
df3['researcher'] = 'C'

df = pd.concat([df1,df2,df3],ignore_index=True)     # ABC测定员3组数据连接在同一张表


"""X-bar Chart"""
A2 = 1.023
xbarbar = (x1_bar+x2_bar+x3_bar)/3
rbar = (R1+R2+R3)/3
ucl = xbarbar + A2 * rbar
lcl = xbarbar - A2 * rbar

grouped = df.groupby('researcher')    # 按照researcher来分组
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(16,4), sharey=True)     # 定义包含1行3列子图
fig.suptitle('Xbar Chart', fontsize=18, y=0)

for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
    df_group = grouped.get_group(key)[['Measure_1','Measure_2','Measure_3']].mean(axis=1)
    df_group.index = range(1,6)     # 取样本编号1,2,3,4,5作为x轴
    df_group.plot(ax=ax, xticks=df_group.index, title=key, label='sample', style='go-', linewidth=2)    # sample
    ax.plot(range(1,6),xbarbar*np.ones(5),'k',label=r'$\bar\bar{x}$')    # xbar
    ax.plot(range(1,6),ucl*np.ones(5), label='UCL')      # ucl
    ax.plot(range(1,6),lcl*np.ones(5), label='LCL')      # lcl
    ax.legend()
    ax.grid(False)     # 隐藏网格

画图效果:


本文链接: http://www.dtmao.cc/news_show_2000089.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?