Python读取excel⽣成正态分布图
Python读取excel⽣成正态分布图
需求背景:
在制造业⼯⼚为了统计产品尺⼨的分布程度,需要制作正态分布图,excel 中没有专门的概率分布图制作⽐较⿇烦。使⽤python容易实现。运⾏环境:
win10 win8 win7 64位操作系统
python 3.6 以上市场调查方案范文
第三⽅库:
numpy
matplotlib
xlrd
金枝玉叶好养吗
程序代码:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
import matplotlib.mlab as mlab
import xlrd
#import time
def get_excel_value(j,filename):#j代表列0是第⼀列,j,filename 为⽂件名
row_list =[]#建⽴空列表插⼊尺⼨数据
excel = xlrd.open_workbook(r"%s"%filename)
#sheet = excel.sheet_by_index(0) #根据下标获取对应的sheet表
sheet = excel.sheet_by_name("report")#根据表名获取对应的sheet表
#for j in range(ls):
for i in range(5, ws):#从表的第6⾏开始到
w_values(i, start_colx=j, end_colx=j+1):#内循环
row_list.w_values(i, start_colx=j, end_colx=j+1)[0])#每次循环取⼀个单元格数据插⼊列表中
狗肉做法arr_mean = np.mean(row_list)
arr_std = np.std(row_list,ddof=1)
return row_list,arr_mean,arr_std #函数返回尺⼨数据,尺⼨均值,尺⼨标准差
def get_tolerance(j,filename):#读取公差函数,公差在⼯作表的3-5⾏
excel = xlrd.open_workbook(r"%s"%filename)
sheet = excel.sheet_by_index(0)#根据下标获取对应的sheet表
nominalvalue = w_values(2, start_colx=j, end_colx=j+1)[0]
w_values(3, start_colx=j, end_colx=j+1)[0]
w_values(4, start_colx=j, end_colx=j+1)[0]
LSL=nominalvalue+low
USL=nominalvalue+up
return LSL,USL
def get_name(j,filename):#获取尺⼨名
excel = xlrd.open_workbook(r"%s"%filename)
sheet = excel.sheet_by_index(0)#根据下标获取对应的sheet表
name = w_values(1, start_colx=j, end_colx=j+1)[0]
return name
class higram:
def__init__(lf,dimension,filename,mu,sigma,data,LSL,USL,num_bins ):
lf.dimension=dimension
lf.filename=filename
lf.mu=mu
lf.sigma=sigma
lf.sigma=sigma
lf.data=data
lf.LSL=LSL
lf.USL=USL
lf.num_bins=num_bins
def creatchart(lf):
# 设置matplotlib正常显⽰中⽂和负号
def norm_pdf(x,mu,sigma):
pdf = np.exp(-((x - mu)**2)/(2* sigma**2))/(sigma * np.sqrt(2*np.pi))#正态分布函数
return pdf
n, bins, patches = plt.hist(lf.data, lf.num_bins, density=1, facecolor="blue", edgecolor="black", alpha=0.5)#facecolor直⽅填充颜⾊edgecolor直⽅边框颜⾊
#FFC0CB Pink 粉红 #E6E6FA Lavender 淡紫⾊/熏⾐草淡紫
y=norm_pdf(bins, mu, sigma)#概率分布图
#print(y)
plt.plot(bins, y,'r--',linestyle='-')#概率分布图"_"代表实线,"r--"代表红⾊
祝福结婚的成语x = np.linspace(lf.LSL, lf.LSL,100)#等差数列
y = np.linspace(0,60,100)
<(x[0],y[39],'LSL',size=13)#text(x,y,str),x,y ⽂字的坐标
plt.plot(x, y,'g--', linewidth=1)
x = np.linspace(lf.USL, lf.USL,100)
y = np.linspace(0,60,100)
<(x[0],y[39],'USL',size=13)
plt.plot(x, y,'g--', linewidth=1)
plt.xlabel("区间")# 显⽰纵轴标签
plt.ylabel("频数/频率")# 显⽰图标题
plt.title(lf.dimension+"_正态分布图")
plt.subplots_adjust(left=0.15)#把画的图从左边0.15(整个为1)处开始, 要不把y轴的label显⽰不出来
plt.show()
if __name__ =="__main__":
#s=time.time()
data=get_excel_value(0,"检测报告.xls")[0]#尺⼨数据
mu=get_excel_value(0,"检测报告.xls")[1]#尺⼨均值
sigma=get_excel_value(0,"检测报告.xls")[2]#尺⼨标准差
鼻翼发红
LSL=get_tolerance(0,"检测报告.xls")[0]#下公差
USL=get_tolerance(0,"检测报告.xls")[1]#上公差
Dimension=get_name(0,"检测报告.xls")
#尺⼨名
#e=time.time()
#t=e-s
#print(t)秋季祝福语
'''print("result:",data)
print("mean:",mu)
print("std:",sigma)
print("LSL:",LSL)
过年习俗的作文print("USL:",USL)
print("Dimension:",Dimension)'''
print("Dimension:",Dimension)'''
h=higram(Dimension,"检测报告.xls",mu,sigma,data,LSL,USL,num_bins=60) h.creatchart()
李愚运⾏效果: