直方图(Histogram)又称为质量分布图,是一种二维统计图表。它用一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,用纵轴表示数量或者占比。用直方图可以比较直观地看出产品质量特征的分布状态,便于判断其总体质量分布情况。
在直方图中可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。
pyplot 中绘制直方图的函数为 hist,其语法格式如下:
matplotlib.pyplot.hist(x,bins=None,range=None,density=None,weights=None,
cumulative=False,bottom=None,histtype='bar',align='mid',orientation=
'vertical',rwidth=None,log=False,color=None,label=None,stacked=False,
normed=None,hold=None,data=None,**kwargs)
函数中的主要参数说明如下:
x:接收 array。表示 x 轴的数据,无默认;
bins:接收 int、序列或 auto。表示直方图的长条形数目,可选项,默认为 10;
range:接收 tuple。表示箱子的下部和上部范围,忽略较低和较高的异常值。如果未提供,则范围为(x.min(),x.max()),可选,默认值为 None;
histtype:取值为 bar、barstacked、step、stepfilled,可选,默认为 bar,表示要绘制的直方图的类型。其中,bar 是传统的条形直方图,如果给出多个数据,则条形直方图并排排列;barstacked 是将多个数据堆叠在一起的条形直方图;step 生成一个默认未填充的线图;stepfilled 生成一个默认填充的线图。
align:取值为 left、mid、right,可选,默认为 mid,用于控制直方图的绘制方式。其中,left 表示直方图位于左边框边缘的中心;mid 表示直方图在 bin 边缘之间居中;right 表示直方图位于右侧边框的中心。
rwidth:接收标量或无,可选,默认值为 None。表示条形的相对宽度作为箱宽的一部分。如果为 None,则自动计算宽度;如果 histtype 是 'step' 或 'stepfilled',则忽略。
color:接收特定 string 或者包含颜色字符串的 array,表示直方图颜色,默认为 None。
edgecolor:接收特定 string 或者包含颜色字符串的 array,表示长条形边框的颜色。
alpha:接收 0~1 的小数。表示长条形的透明度,默认为 None。
normed:表示是否将得到的直方图向量归一化,可选项,默认为 0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
【例 1】绘制一个正态分布数据的直方图。其程序代码 test1.py 如下。
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# 设置Matplotlib正常显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
# 随机生成10000个满足正态分布的数据
data = np.random.randn(10000)
plt.hist(data, bins=40,normed=1,color="red",eedgecolor="black",
rwidth=0.7,alpha=0.7)
# 显示横轴标签
plt.xlabel("区间")
# 显示纵轴标签
plt.ylabel("频数/频率")
# 显示图标题
plt.title("频数/频率分布直方图")
plt.show()
运行程序后,显示的直方图如图 1 所示。
图 1:正态分布数据的直方图