0、认识直方图
直方图:
又被称作“频率图\频数图”,展示为柱状图(或条形图),将所收集数据、特性质或结果值,用一定的范围在坐标横轴上加以区分几个相等的区间,将各区间内的测定值所出现的次数累积起来的面积,用柱形图表示出来。用以了解产品在规格标准下的分布形态、工序中心值及差异的大小等情形
。
分析直方图:
可以观察条形或曲线的形状,可以观察数据在各个条形内的取值的数目。如果在条形图上再加一条顾客需求曲线
,很快就可得知所做的满足顾客或不满足顾客需求的程度。
直方图功用
- 1.评估和检查"产品"的排布情况;
- 2.指出采取措施的必要;
- 3.通过对比前后两个直方图曲线,检查执行纠正措施是否有效;
- 4.比较设备、物料、人员及供货商的重要程度,(需要合适的参考指标);
做图前数据准备
1.手集数据x,一般在50以上,并记录总数N
2.将数据分组,指定组数(bins)
3.找出最大值s_max,最小值s_min,计算出全距(R)
4.定出距组(H):全距R/组数
5.定出组界
6.决定组的中心点
7.绘图,观察效果是否符合预期
8.调整参数,
直方图形态图
图片来源与网络,若侵权请联系删除正常状态下直方图分析中心偏左的直方图
直方图偏向规格的下限,并伸展至规格下限左侧,表示已产生部分超出规格下限要求的不良品。
中心偏右的直方图
直方图偏向规格的上限,并伸展至规格上限右侧。表示已产生部分超出规格下限的要求的不良品。
1、plt.bar绘制柱状图参数详解
bar(x, height, width=0.8, bottom=None, ***, align='center', data=None, **kwargs)
x: 表示x坐标,数据类型为int或float类型,
height: 表示柱状图的高度,也就是y坐标值,数据类型为int或float类型,
width: 表示柱状图的宽度,取值在0~1之间,默认为0.8
bottom: 柱状图的起始位置,也就是y轴的起始坐标,
align: 柱状图的中心位置,"center","lege"边缘
color: 柱状图颜色
edgecolor: 边框颜色
linewidth: 边框宽度
tick_label: 下标标签
log: 柱状图轴使用科学计算方法,bool类型
orientation: 柱状图是竖直还是水平,竖直:"vertical",水平条:"horizontal"
atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
left: 每一个柱形左侧的X坐标
height:每一个柱形的高度
width: 柱形之间的宽度
bottom: 柱形的Y坐标
color: 柱形的颜色
import numpy as np
import matplotlib.pyplot as plt
# x轴坐标为自动生成的1,2,3,4,当然也可以是一个数组
x = np.arange(4)
# 数据,三组对比数据
Bj = [52, 55, 63, 53]
Sh = [44, 66, 55, 41]
js = [32, 25, 85, 63]
#条形宽度为0.3
bar_width = 0.3
# 绘图 x 表示 从哪里开始
plt.bar(x, Bj, bar_width)
plt.bar(x+bar_width, Sh, bar_width, align="center")
plt.bar(x+bar_width+bar_width, js, bar_width, align="center")
# plt.bar(x, Sh, bar_width, bottom=Bj)
# plt.bar(x, Bj, bar_width, label="城市指标", tick_label=str1)
# 添加数据标签
#for a, b in zip(x, Bj):
#plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=10)
#plt.text(a, b+0.5, '%0.f' % b, ha='center', va='bottom', fontsize=10,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5))
# 添加图例
#plt.legend()
# 展示图片
plt.show()
三组数据横向排列
plt.bar(x, Sh, bar_width, bottom=Bj)
两组数据上下排列
plt.bar(x, Bj, bar_width, label="城市指标", tick_label=str1)
# 添加数据标签
for a, b in zip(x, Bj):
plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=10)
显示横坐标标签
# 添加图例
#plt.legend()
显示图例
plt.text(a, b+0.5, '%0.f' % b, ha='center', va='bottom', fontsize=10,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5))
设置数值的边框大小粗细、背景色、字体大小、位置、透明度
带箭头显示特殊标注
2、plt.hist() 绘制频数分布图
matplotlib.pyplot.hist(
x, bins=10, range=None, normed=False,
weights=None, cumulative=False, bottom=None,
histtype=u'bar', align=u'mid', orientation=u'vertical',
rwidth=None, log=False, color=None, label=None, stacked=False,
hold=None, **kwargs)
关于plt.hist()参数的使用详解
- x : (n,) array or sequence of (n,) arrays
指定每个bin(箱子)分配的数据,对应x轴- range: tuple, 显示的区间,range在没有给出bins时生效
- bins : integer or array_like, optional
指定bin(箱子)的个数,也就是总共有几条条状图- density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
- histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
- align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
- log: bool,默认False,即y坐标轴是否选择指数刻度
- stacked: bool,默认为False,是否为堆积状图
- color : color or array_like of colors or None, optional
这个指定条状图的颜色red green blue black pink gray orange purple
- hist中的alpha参数是控制填充颜色的深度,可以把alpha设置成0.99和0.01,看看画出来的效果就知道了
#导入测试数据(鸢尾花数据)
from sklearn.datasets import load_iris
#导入matplotlib.pyplot
import matplotlib.pyplot as plt
#下载鸢尾花数据
iris = load_iris()
#截取部分数据
s = iris.data[iris.target == 1, 3]
'''
print(s)
[1.4 1.5 1.5 1.3 1.5 1.3 1.6 1. 1.3 1.4 1. 1.5 1. 1.4 1.3 1.4 1.5 1.
1.5 1.1 1.8 1.3 1.5 1.2 1.3 1.4 1.4 1.7 1.5 1. 1.1 1. 1.2 1.6 1.5 1.6
1.5 1.3 1.3 1.3 1.2 1.4 1.2 1. 1.3 1.2 1.3 1.3 1.1 1.3]
'''
#新建直方图,不指定参数,参数为默认,输出频数直方图
plt.hist(s)
'''
如果在使用plt.hist(normed=True) 的时候报错:
【AttributeError:'Rectangle' object has no property 'normed'】
是因为normed已经被删除了,替换的是density效果是一样的:
density=True
'''
#设置参数density
plt.hist(s,density=True,alpha=0.5)
plt.hist(s,density=True,alpha=0.99)
#显示图表
plt.show()
import matplotlib.pyplot as plt
plt.plot(x,y,'ro',label="point")
plt.legend()
plt.show()
网友评论