#coding=utf-8
#Program python3.6
import pandas as pd # 数据分析
import os # 操作系统OS
import matplotlib.pyplot as plt # 可视化图表
import numpy as np # 科学计算
from dateutil.parser import parse # 日期时间
import warnings # 警报处理
warnings.filterwarnings("ignore", module="matplotlib") # 忽略matplotlib警告信息
print('程序功能:根据起止日期,收集研磨组制程检查记录数据,D:\文件夹下生成XBar-R图pdf文档')
mydate = '2019-11-1,2019-11-30'
date_low = parse(mydate.split(',')[0])
date_upper = parse(mydate.split(',')[1])
drawing = '1101-1070276'
xls = pd.ExcelFile(r'd:\python\研磨各工序首末件.xlsm') # 读取excel数据
source = pd.read_excel(xls,sheet_name='target',header=None,engine='c',index=None) ##drawings = source[0].drop_duplicates(inplace=True) 删除重复值
source.drop([1,3,4,5,6,8],axis=1,inplace=True) # 删除不需要的列
source.drop(source[source[0]!=drawing].index,inplace=True) # 删除A列不等于drawing所在行
source.dropna(how='any') # 删除空值
source.drop(source[source[7] == '检查频率/时间'].index,inplace=True) # 清除“检查频率/时间”所在行
source = source[(source.iloc[:,1]>=date_low) & (source.iloc[:,1]<=date_upper)] # 按日期截取数据
gp = source.groupby(by=[7],sort = True) # 按检查内容分组
length = len(gp) # 检查内容项目数量 #source.set_index([2],inplace=True,drop=False)
i=0
fig,ax = plt.subplots(nrows=length,ncols=1,sharex=True,figsize=(11.5,8.2)) # 定义子图数量,共用X轴坐标
ax[0].set_title('{} Xbar-R控制图'.format(drawing),fontsize=18) # 定义标题
for k,v in gp:
ar = []
v[2] = v[2].dt.strftime('%m-%d')
v.set_index([2],inplace=True)
for x in v.values: # 这里用法很有问题
ar.extend(x[2:])
ax[i].plot(ar,linestyle='--',linewidth=1.1,marker='.',markersize=6)
ax[i].get_yaxis().get_major_formatter().set_useOffset(False) # 纵轴刻度由科学计数法改为标准数学法
ax[i].set_xlabel(k.replace('\n',''),weight='normal',fontsize=12)
ax[i].grid(True,alpha=0.6)
i=i+1
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文支持 #plt.rcParams['font.size']=8
plt.tight_layout()
plt.subplots_adjust(left=0.06, bottom=0.07, right=0.97,top=0.94,hspace=0.2, wspace=0.15) ## 调整边距,子图间距
plt.savefig(r'd:\python\{}.pdf'.format(drawing)) # 存为pdf文档
plt.show() # 图形显示