# 绘制直方图

# 使用 hist() 绘制直方图

# 使用 pyplot 的 hist() 函数可以快速绘制直方图,hist() 函数的语法格式如下所示 :

hist(x, bins=None, range=None, density=None, weights=None,
    cumulative=False, bottom=None, histtype='bar', align='mid',
    orientation='vertical', rwidth=None, log=False, label=None,
    stacked=False, normed=None, *,data=None, **kwargs)

# 该函数常用参数的含义如下。

# · x :表示 x 轴的数据,可以为单个数组或多个数组的序列。
· bins :表示矩形条的个数,默认为 10。
· range :表示数据的范围。若没有提供 range 参数的值,则数据范围为 (x.min(), x.max())。
· cumulative :表示是否计算累计频数或频率。
· histtype :表示直方图的类型, 支持 'bar'、'barstacked'、'step'、'stepfilled'四种取值, 其中'bar'为默认值,代表传统的直方图;'barstackecd'代表堆积直方图 ;'step'代表未填充的线条直方图;'stepfilled'代表填充的线条直方图。
· align :表示矩形条边界的对齐方式,可设置为'left'、'mid'或'right',默认为'mid'。
· orientation :表示矩形条的摆放方式,默认为 'vertical', 即垂直方向。
· rwidth :表示矩形条宽度的百分比,默认为0。若 histtype 的值为 'step'或'stepfilled', 则直接忽略 rwidth 参数的值。
· stacked :表示是否将多个矩形条以堆积形式摆放。

# 例如,绘制一个具有 8 个矩形条填充的线条直方图,代码如下。

In [14]:
import numpy as np
import matplotlib.pyplot as plt
# 准备 50 个随机测试数据
scores = np.random.randint (0, 100, 50)
# 绘制直方图
plt.hist (scores, bins=8, histtype='stepfilled')
plt.show ()

# 运行程序,效果如图 2-14 所示。

image

# 实例 5:人脸识别的灰度直方图

# 随着计算机技术的不断发展,人工智能的应用已渗透到人们日常生活的方方面面,其中人脸识别技术是近两年较为热门的话题之一。人脸识别技术是一种生物特征识别技术,它通过从装有摄像头的终端设备拍摄的人脸图像中抽取人的个性化特征,以此来识别人的身份。灰度直方图便是实现人脸识别的方法之一,它将数字图像的所有像素,按照灰度值的大小,统计其出现的频率。
下面使用一组 10000 个随机数作为人脸识别的灰度值,使用 hist() 函数绘制一个灰度直方图,具体代码如下。

In [15]:
# 05_face_recognition
import matplotlib.pyplot as plt
import numpy as np
# 10000 个随机数
random_state = np.random.Randomstate(19680801)
random_x = random_state.randn (10000)
# 绘制包含 25 个矩形条的直方图
plt.hist (randorn_x, bin=25)
plt.show ()

# 运行程序,效果如图 2-15 所示。

image

# 图 2-15 中,x 轴代表灰度值,y 轴代表频率。由图 2-15 可知,位于 -0.5 ~ 0 之间的灰度值最多,位于 -4 ~ -3 或 3 ~ 4 之间的灰度值最少。