参考官方文档:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist
matplot.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, *, data=None, **kwargs)
返回元组(frequency, bins, patches)。
注:本文将bin译为柱子以帮助理解。
参数:
x:数组或(允许长度不等的)数组序列;
bins:整数值或序列。如果bins为整数值,则bins为柱子个数,根据数据的取值范围和柱子个数bins计算每个柱子的范围值,柱宽=(x.max()-x.min())/bins。例:数据取值为[1,2,3,4,5,6],bins=6,柱宽=0.8333...,则每个柱子的范围分别为:[1,1.83), [1.83,2.66)...,[5.17,6],见下图:
如果bins取值为序列,则该序列给出每个柱子的范围值(即边缘)。除最后一个柱子外,其他柱子的取值范围均为半开(左闭右开)。接上例,数据共n=6个取值,若bins=range(1,n+2)即bins的取值为[1,2,3,4,5,6,7],注意range用法。则每个柱子的范围为:[1,2),[2,3),...,[5,6),[6,7]。注意:这里可以看出为什么bins的取值需要包含7,因为最后一个柱子的取值范围是全闭的,如果取值只到6,则最后一个柱子的范围为[5,6],取值为5和6的数据将被合并计算。例子见下图:
range:元组(tuple)或None。剔除较大和较小的离群值,给出全局范围。如果为None,则默认为(x.min(), x.max())。如果bins取值为序列,则range无效,python会基于bins的取值画图。
density:布尔值。如果为true,则返回的元组的第一个参数frequency将为频率而非默认的频数。可自行验证sum(frequency)。
weights:与x形状相同的权重数组。将x中的每个元素乘以对应权重值再计数。如果normed或density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图。
cumulative:布尔值。如果为True,则计算累计频数。如果normed或density取值为True,则计算累计频率。
bottom:数组,标量值或None。每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子。
histtype:{'bar', 'barstacked', 'step', 'stepfilled'}。'bar'是传统的条形直方图;'barstacked'是堆叠的条形直方图;'step'是未填充的条形直方图,只有外边框;'stepfilled'是有填充的直方图。当histtype取值为'step'或'stepfilled',rwidth设置失效,即不能指定柱子之间的间隔,默认连接在一起。
align:{'left', 'mid', 'right'}。'left':柱子的中心位于bins的左边缘;'mid':柱子位于bins左右边缘之间;'right':柱子的中心位于bins的右边缘。可在上面两张图中求证。
orientation:{'horizontal', 'vertical'}:如果取值为horizontal,则条形图将以y轴为基线,水平排列。
rwidth:标量值或None。柱子的宽度占bins宽的比例。例:当bins=range(1,8)时,每个柱子默认宽为1,若设置rwidth=0.8,则柱子的宽度将为0.8,柱子之间的距离为0.2。
log:布尔值。如果取值为True,则坐标轴的刻度为对数刻度。如果log为True且x是一维数组,则计数为0的取值将被剔除,仅返回非空的(frequency, bins, patches)。
color:具体颜色,数组(元素为颜色)或None。
label:字符串(序列)或None。有多个数据集时,用label参数做标注区分。
stacked:布尔值。如果取值为True,则输出的图为多个数据集堆叠累计的结果,见下图;如果取值为False且histtype='bar'或'step',则多个数据集的柱子并排排列,见下图。
normed:布尔值。官方不推荐使用,建议改用density参数。
返回的参数:
frequency(官方文档用n表示):数组或数组列表。柱子的高,即频数或频率值,数据类型为float。
bins:每个柱子的左右边缘值(即区间范围),例子见上文输入参数bins。
patches:列表或列表的列表。取值为每个柱子包含的数据。