简介
直方图是可视化数据集分布的好方法,而 Matplotlib 是创建数据可视化最流行的 Python 库之一。在本实验中,我们将使用 Matplotlib 为多个数据集创建并排直方图。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入必要的库
首先,我们需要为代码导入必要的库。我们将使用 Matplotlib 和 NumPy 来绘制直方图:
import matplotlib.pyplot as plt
import numpy as np
创建示例数据集
接下来,我们将创建用于直方图的示例数据集。我们将创建三个数据集,每个数据集包含 387 个数据点:
np.random.seed(19680801)
number_of_data_points = 387
labels = ["A", "B", "C"]
data_sets = [np.random.normal(0, 1, number_of_data_points),
np.random.normal(6, 1, number_of_data_points),
np.random.normal(-3, 1, number_of_data_points)]
计算绘图所需的量
在创建直方图之前,我们需要计算一些用于绘图的量。我们将计算数据集的范围、装箱后的数据集、每个箱子的最大值以及每个直方图的 x 轴位置:
hist_range = (np.min(data_sets), np.max(data_sets))
number_of_bins = 20
binned_data_sets = [
np.histogram(d, range=hist_range, bins=number_of_bins)[0]
for d in data_sets
]
binned_maximums = np.max(binned_data_sets, axis=1)
x_locations = np.arange(0, sum(binned_maximums), np.max(binned_maximums))
绘制直方图
既然我们已经计算出了绘图所需的量,就可以创建直方图了。我们将使用barh方法为每个直方图绘制水平条:
## 所有直方图的箱边缘是相同的
bin_edges = np.linspace(hist_range[0], hist_range[1], number_of_bins + 1)
heights = np.diff(bin_edges)
centers = bin_edges[:-1] + heights / 2
## 循环并绘制每个直方图
fig, ax = plt.subplots()
for x_loc, binned_data in zip(x_locations, binned_data_sets):
lefts = x_loc - 0.5 * binned_data
ax.barh(centers, binned_data, height=heights, left=lefts)
ax.set_xticks(x_locations, labels)
ax.set_ylabel("数据值")
ax.set_xlabel("数据集")
显示直方图
最后,我们可以使用show方法来显示直方图:
plt.show()
总结
在这个实验中,我们学习了如何使用 Matplotlib 为多个数据集创建并排直方图。我们计算了绘图所需的量,并使用barh方法为每个直方图创建水平条。有了这些技能,我们可以创建信息丰富的数据可视化,以获得见解并与他人交流我们的发现。