使用 Matplotlib 生成多个直方图

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

直方图是可视化数据集分布的好方法,而 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方法为每个直方图创建水平条。有了这些技能,我们可以创建信息丰富的数据可视化,以获得见解并与他人交流我们的发现。