matplotlib.axes.Axes.hist#
- Axes.hist(x, bins=None, *, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, data=None, **kwargs)[源]#
计算并绘制直方图。
此方法使用
numpy.histogram
将 x 中的数据分箱并计算每个箱中的值数量,然后以BarContainer
或Polygon
的形式绘制分布图。*bins*、*range*、*density* 和 *weights* 参数会被转发给numpy.histogram
。如果数据已经分箱并计数,请使用
bar
或stairs
来绘制分布图counts, bins = np.histogram(x) plt.stairs(counts, bins)
或者,通过将每个箱视为一个权重等于其计数的单点,使用
hist()
绘制预先计算的箱和计数plt.hist(bins[:-1], bins, weights=counts)
数据输入 x 可以是一个单独的数组,一个可能包含不同长度数据集的列表([x0, x1, ...]),或者是一个每列都是一个数据集的二维 ndarray。请注意,ndarray 形式相对于列表形式是转置的。如果输入是一个数组,则返回值为元组(n,bins,patches);如果输入是数组序列,则返回值为元组([n0, n1, ...],*bins*,[patches0, patches1, ...])。
不支持掩码数组。
- 参数:
- x(n,) 数组或 (n,) 数组序列
输入值,这可以是一个单独的数组,或者是一个长度不要求相同的数组序列。
- bins整数、序列或字符串, 默认值:
rcParams["hist.bins"]
(默认值:10
) 如果 bins 是一个整数,它定义了该范围内等宽箱的数量。
如果 bins 是一个序列,它定义了箱的边缘,包括第一个箱的左边缘和最后一个箱的右边缘;在这种情况下,箱的间距可能不均匀。除最后一个(最右侧的)箱外,所有箱都是半开区间。换句话说,如果 bins 是
[1, 2, 3, 4]
则第一个箱是
[1, 2)
(包含 1,但不包含 2),第二个箱是[2, 3)
。然而,最后一个箱是[3, 4]
,它 包含 4。如果 bins 是一个字符串,它是
numpy.histogram_bin_edges
支持的分箱策略之一:'auto'、'fd'、'doane'、'scott'、'stone'、'rice'、'sturges' 或 'sqrt'。- range元组或 None, 默认值: None
箱的下限和上限范围。下限和上限的离群值将被忽略。如果未提供,range 为
(x.min(), x.max())
。如果 *bins* 是一个序列,*range* 将不起作用。如果 *bins* 是一个序列或指定了 *range*,则自动缩放将基于指定的箱范围而不是 *x* 的范围。
- density布尔值, 默认: False
如果为
True
,则绘制并返回概率密度:每个箱将显示箱的原始计数除以总计数 和箱宽(density = counts / (sum(counts) * np.diff(bins))
),使得直方图下的面积积分为 1(np.sum(density * np.diff(bins)) == 1
)。如果 *stacked* 也为
True
,则所有直方图的总和将被归一化为 1。- weights(n,) 类数组或 None, 默认值: None
一个与 *x* 形状相同的权重数组。*x* 中的每个值仅贡献其关联的权重到箱计数中(而不是 1)。如果 *density* 为
True
,则权重会被归一化,以便密度在整个范围内的积分保持为 1。- cumulative布尔值或 -1, 默认值: False
如果为
True
,则计算一个直方图,其中每个箱表示该箱中的计数加上所有较小值的箱中的计数。最后一个箱表示数据点的总数。如果 *density* 也为
True
,则直方图会被归一化,使得最后一个箱的值为 1。如果 *cumulative* 是一个小于 0 的数字(例如 -1),则累积方向会反转。在这种情况下,如果 *density* 也为
True
,则直方图会被归一化,使得第一个箱的值为 1。- bottom类数组或浮点数, 默认值: 0
每个箱底部的Y轴位置,即箱子从
bottom
绘制到bottom + hist(x, bins)
。如果是一个标量,则每个箱的底部都移动相同的量。如果是一个数组,则每个箱独立移动,并且 *bottom* 的长度必须与箱的数量匹配。如果为 None,则默认为 0。- histtype{'bar', 'barstacked', 'step', 'stepfilled'}, 默认值: 'bar'
要绘制的直方图类型。
'bar' 是一种传统的条形直方图。如果提供多个数据,条形图将并排排列。
'barstacked' 是一种条形直方图,其中多个数据堆叠在一起。
'step' 生成一个线图,默认不填充。
'stepfilled' 生成一个线图,默认填充。
- align{'left', 'mid', 'right'}, 默认值: 'mid'
直方图条的水平对齐方式。
'left':条形图以左箱边缘为中心对齐。
'mid':条形图以箱边缘之间为中心对齐。
'right':条形图以右箱边缘为中心对齐。
- orientation{'vertical', 'horizontal'},默认值: 'vertical'
如果为 'horizontal',则
barh
将用于条形直方图,且 *bottom* kwarg 将是左边缘。- rwidth浮点数或 None, 默认值: None
条形图的相对宽度,作为箱宽度的分数。如果为
None
,则自动计算宽度。如果 *histtype* 为 'step' 或 'stepfilled',则忽略。
- log布尔值,默认值:False
如果为
True
,直方图轴将被设置为对数刻度。- color颜色 或 颜色 列表或 None, 默认值: None
颜色或颜色序列,每个数据集一个。默认值(
None
)使用标准线条颜色序列。- label字符串或字符串列表,可选
字符串,或用于匹配多个数据集的字符串序列。条形图为每个数据集生成多个补丁(patches),但只有第一个补丁会获得标签,这样
legend
才能按预期工作。- stacked布尔值, 默认值: False
如果为
True
,多个数据将堆叠在一起。如果为False
,如果 *histtype* 为 'bar',多个数据将并排排列;如果 *histtype* 为 'step',则会相互覆盖(堆叠)
- 返回:
- n数组或数组列表
直方图箱的值。有关可能语义的描述,请参见 *density* 和 *weights*。如果输入 *x* 是一个数组,则这是一个长度为 *nbins* 的数组。如果输入是数组序列
[data1, data2, ...]
,则这是一个数组列表,其中包含每个数组的直方图值,顺序相同。即使不使用加权或归一化,数组 *n*(或其元素数组)的数据类型也始终是浮点数。- bins数组
箱的边缘。长度为 nbins + 1(nbins 个左边缘和最后一个箱的右边缘)。即使传入多个数据集,也始终是一个单独的数组。
- patches
BarContainer
或单个Polygon
的列表或此类对象的列表 用于创建直方图的单个艺术家容器,如果存在多个输入数据集,则为此类容器的列表。
- 其他参数:
- data可索引对象,可选
如果给定,以下参数也接受字符串
s
,如果s
是data
中的一个键,则将其解释为data[s]
x, weights
- **kwargs
Patch
属性。以下属性还接受与 *x* 中数据集相对应的值序列:edgecolor、facecolor、linewidth、linestyle、hatch。3.10 版本新增:允许在上述 Patch 属性中使用值序列。
备注
对于大量箱(>1000),可以通过使用
stairs
绘制预计算的直方图(plt.stairs(*np.histogram(data))
),或将 *histtype* 设置为 'step' 或 'stepfilled' 而非 'bar' 或 'barstacked' 来显著加速绘图。