Matplotlib hist()创建直方图(非常详细)
直方图又称为质量分布图,主要用于展示数据在各个区间的分布情况。直方图的外观与柱形图非常相似,但是它们存在以下几个区别:
如需创建直方图,可以使用 pyplot 模块中的 hist() 函数或 Axes 对象的 hist() 方法。
下面的代码是使用 Axes 对象的 hist() 方法创建一个直方图,根据数据中的最小值和最大值,Matplotlib 自动将所有数据划分为 5 个区间,并统计每个区间的数据个数:

图 1 自动分组的直方图
为了使每个柱形的界限清晰可见,可以使用 linewidth 参数设置柱形边框线的宽度,使用 edgecolor 参数设置柱形边框线的颜色,此处将边框线的宽度设置为 0.5,将边框线的颜色设置为白色:

图 2 使柱形的边界清晰可见
[x, y) 表示左闭右开的区间,当一个值大于或等于 x 且小于 y 时,该值就位于该区间内。[x,y]表示左右都闭合的区间,当一个值大于或等于 x 且小于或等于 y 时,该值就位于该区间内。
为直方图指定区间时,只需将表示每个区间边界的值以列表的形式设置给 bins 参数,Matplotlib 就会自动创建各个区间。
下面的代码是使用变量 bins 保存由区间的边界值组成的列表,然后在创建直方图时将该变量设置为 bins 参数的值,将创建如下图所示的直方图:

图 3 手动分组的直方图
- 直方图中的柱形表示数据在各个区间出现的次数,柱形图中的柱形表示数据的大小;
- 直方图中所有柱形之间是紧密相连的,它们之间没有空隙。柱形图中所有柱形之间都存在空隙;
- 直方图表示连续型数据,柱形图表示离散型数据。
如需创建直方图,可以使用 pyplot 模块中的 hist() 函数或 Axes 对象的 hist() 方法。
创建自动分组的直方图
hist() 函数或 hist() 方法的第一个参数x表示要统计的数据,创建直方图时必须指定该参数,其他参数都是关键字参数。将 bins 参数设置为一个整数时,表示为数据划分的区间数量,每个区间的左右边界由 Matplotlib 自动确定。下面的代码是使用 Axes 对象的 hist() 方法创建一个直方图,根据数据中的最小值和最大值,Matplotlib 自动将所有数据划分为 5 个区间,并统计每个区间的数据个数:
import matplotlib.pyplot as plt x = [1, 3, 10, 12, 16, 25, 27, 31, 33, 36, 45, 52, 56] fig, ax = plt.subplots() ax.hist(x, bins=5) plt.show()如图所示:

图 1 自动分组的直方图
为了使每个柱形的界限清晰可见,可以使用 linewidth 参数设置柱形边框线的宽度,使用 edgecolor 参数设置柱形边框线的颜色,此处将边框线的宽度设置为 0.5,将边框线的颜色设置为白色:
import matplotlib.pyplot as plt x = [1, 3, 10, 12, 16, 25, 27, 31, 33, 36, 45, 52, 56] fig, ax = plt.subplots() ax.hist(x, bins=5, linewidth=0.5, edgecolor="w") plt.show()如下图所示:

图 2 使柱形的边界清晰可见
创建手动分组的直方图
虽然 Matplotlib 能够根据数据的值范围自动创建各个区间,但是为了更符合实际需求,通常需要自己创建特定的值区间。可以指定任意个数的区间,每个区间都有两个值组成,最后一个区间的左右两个值都是闭合的,其他区间都是左闭右开的。[x, y) 表示左闭右开的区间,当一个值大于或等于 x 且小于 y 时,该值就位于该区间内。[x,y]表示左右都闭合的区间,当一个值大于或等于 x 且小于或等于 y 时,该值就位于该区间内。
为直方图指定区间时,只需将表示每个区间边界的值以列表的形式设置给 bins 参数,Matplotlib 就会自动创建各个区间。
下面的代码是使用变量 bins 保存由区间的边界值组成的列表,然后在创建直方图时将该变量设置为 bins 参数的值,将创建如下图所示的直方图:

图 3 手动分组的直方图
import matplotlib.pyplot as plt x = [1, 3, 10, 12, 16, 25, 27, 31, 33, 36, 45, 52, 56] fig, ax = plt.subplots() ax.hist(x, bins=5, linewidth=0.5, edgecolor="w") plt.show()