【メモ書き】グラフを作るためのコード(管理図)

グラフを作るときはpythonでデータを作ってパワポで調整しているのだが、この記事で使うグラフをpythonで描こうとしたところ色々設定に苦労したので、メモ書きとしてコードを残ししておく。

f:id:Chemstat:20210207223706p:plain

 

import numpy as np
import matplotlib.pyplot as plt

center = 5000#中心地
spec = 150#規格
sigma = 30#ばらつき

x = np.arange(1000)
y = np.random.normal(center, sigma, 1000)#正規分布の乱数
USL = center + spec#規格上限
LSL = center - spec#規格下限


x_range = [0, len(x)]#x軸の4cdax_range = [0, 100]#x軸の範囲
y_range = [4700, 5300]#y軸の範囲
x_ticks = [0, len(x)] #x軸目盛
y_ticks = [5150, 5000, 4850] #y軸目盛:
set_colors = {'sample':"#666666","average":"#666666", 'SL_fill':"#ffcccc", 'spines':"#999999", "labels":"#666666"}

fig2 = plt.figure(figsize=(4,4))#グラフの作成
ax1 = fig2.add_subplot(111)#subplotの作成

#ロットデータ
ax1.plot(x,y, color=set_colors['sample'])#サンプルのデータ

#規格外の領域塗りつぶし
y_fill_UL = [[max(y_range), max(y_range)], [USL,USL]]
ax1.fill_between(x_range, y_fill_UL[0] ,y_fill_UL[1], facecolor=set_colors['SL_fill'], alpha=1 )#上側のグラフ塗りつぶし
y_fill_LL = [[min(y_range), min(y_range)], [LSL,LSL]]
ax1.fill_between(x_range, y_fill_LL[0] ,y_fill_LL[1], facecolor=set_colors['SL_fill'], alpha=1 )#下側のグラフ塗りつぶし

#グラフの体裁
ax1.set_title(None, fontsize=10, fontname='meiryo', color=set_colors['labels'])#グラフタイトルなし

ax1.grid(False) # (5)目盛線表示 Trueで表示される

#x軸
ax1.set_xlim(x_range[0], x_range[1])#x目盛の範囲
ax1.set_xlabel(None, fontsize=15, fontname='meiryo', color=set_colors['labels']) #x軸のラベル
ax1.tick_params(axis='x', labelsize=15, width=0, colors=set_colors['labels'],pad =10) #x目盛のサイズ
ax1.set_xticks(x_ticks)#x軸の目盛

#y軸
ax1.set_ylim(y_range[0], y_range[1])#y目盛の範囲
ax1.set_ylabel(None, fontsize=15, fontname='meiryo', color=set_colors['labels'])#y軸のラベル
ax1.tick_params(axis='y', labelsize=15, width=0 ,colors=set_colors['labels'],pad =10) #y目盛のサイズ
ax1.set_yticks(y_ticks)#y軸の目盛

#枠線の設定
ax1.spines['top'].set_linewidth(0)
ax1.spines['right'].set_linewidth(0)
ax1.spines['left'].set_linewidth(2)
ax1.spines['left'].set_color(set_colors['spines'])
ax1.spines['bottom'].set_linewidth(2)
ax1.spines['bottom'].set_color(set_colors['spines'])


plt.show()