首页 > 编程笔记 > Python笔记 阅读:8

Matplotlib hist()创建直方图(非常详细)

直方图又称为质量分布图,主要用于展示数据在各个区间的分布情况。直方图的外观与柱形图非常相似,但是它们存在以下几个区别:
如需创建直方图,可以使用 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()

相关文章