在 Matplotlib 中创建分组条形图

matplotlibpythondata visualization

什么是 matplotlib?

Matplotlib 是一个流行的开源 Python 数据可视化库,广泛应用于科学、工程和数据科学领域。Matplotlib 以其灵活性和广泛的可自定义选项而闻名,这使其成为创建用于研究或数据分析目的的复杂可视化的绝佳选择。最流行的可视化类型之一是分组条形图,它允许并排比较多个变量,同时显示组或子类别之间的差异。在本教程中,我们将向您展示如何使用真实示例在 Matplotlib 中创建分组条形图。

条形图在数据分析中的用途和意义是什么?

条形图是数据分析中用于显示分类数据分布的常见可视化类型。在条形图中,类别通常显示在 x 轴上,而每个条形的高度表示每个类别中观察的频率或比例。

条形图的重要性取决于分析的背景和目的。以下是一些条形图如何有用的示例 -

比较频率或比例 - 条形图可用于比较不同类别中观察的频率或比例。例如,条形图可用于比较临床试验中患有不同类型疾病的患者数量,或市场研究中喜欢不同品牌产品的客户比例。每个条形的高度表示每个类别中观察的频率或比例,从而易于进行视觉比较。

显示随时间或其他变量变化的趋势 - 条形图还可用于显示随时间或其他变量变化的观察频率或比例。例如,条形图可用于显示不同时间段内购买商店不同产品的顾客数量。通过为每个时间段使用不同的颜色或图案,很容易看到购买分布随时间的变化。

识别异常值或异常观察值 - 条形图还可用于识别异常值或异常观察值。如果一个类别的频率或比例比其他类别高得多或低得多,则可能表示异常观察或数据错误。

就统计意义而言,条形图通常用作描述工具,而不是正式的统计测试。但是,它们仍然可以提供有关分类数据分布的有用信息,并有助于识别可能感兴趣的模式或趋势。重要的是要记住,如果条形图构造不正确或数据不适合这种类型的可视化,则条形图可能会产生误导。因此,仔细考虑分析的目的并相应地选择合适的可视化工具始终很重要。

先决条件

在我们深入研究任务之前,应该在您的系统上安装一些东西 -

推荐设置列表 -

  • pip install pandas, matplotlib

  • 预计用户可以访问任何独立 IDE,例如 VS-Code、PyCharm、Atom 或 Sublime text。

  • 甚至可以使用在线 Python 编译器,例如 Kaggle.com、Google Cloud 平台或任何其他编译器。

  • 更新版本的 Python。在撰写本文时,我使用的是 3.10.9 版本。

  • 了解 Jupyter 笔记本的使用。

  • 虚拟环境的知识和应用将是有益的,但不是必需的。

  • 还希望此人对统计学和数学有很好的理解。

完成任务所需的步骤

让我们看看代码示例和步骤 −

示例

import numpy as np
import matplotlib.pyplot as plt

# 定义绘图数据
data = {
   'Group 1': [20, 35, 30, 35, 27],
   'Group 2': [25, 32, 34, 20, 25],
   'Group 3': [12, 20, 22, 30, 15],
}

# 定义 x 轴标签和每个条形的宽度
labels = ['类别 1', '类别 2', '类别 3', '类别 4', '类别 5']
bar_width = 0.2

# 为每组条形创建一个 x 轴位置的 numpy 数组
x_pos = np.arange(len(labels))

# 创建一个图形和轴对象
fig, ax = plt.subplots()

# 循环遍历每组条形并为每个组创建一组条形
for i, (group, values) in enumerate(data.items()):
    # 计算当前条形组的 x 轴位置
    pos = x_pos + (i * bar_width)
    # 为当前组创建一组条形
    ax.bar(pos, values, width=bar_width, label=group)

# 设置 x 轴标签和刻度位置
ax.set_xticks(x_pos + ((len(data) - 1) / 2) * bar_width)
ax.set_xticklabels(labels)

# 为图添加图例
ax.legend()

# 为图添加轴标签和标题
ax.set_xlabel('Categories')
ax.set_ylabel('Values')
ax.set_title('Grouped Bar Plot')

# 显示图
plt.show()

在此示例中,我们有三组条形图(组 1、组 2 和组 3)和五个类别(类别 1、类别 2、类别 3、类别 4 和类别 5)。我们使用 Python 字典定义图的数据,其中键代表组,值是每个类别的值列表。我们还定义了每个条形的宽度和 x 轴的标签。

然后,我们使用 np.arange() 函数为每组条形创建一个 x 轴位置的 numpy 数组。我们使用 plt.subplots() 函数创建一个图形和轴对象。然后,我们循环遍历每组条形并使用 ax.bar() 函数为每个组创建一组条形。我们分别使用 ax.set_xticks() 和 ax.set_xticklabels() 函数设置 x 轴标签和刻度位置。我们使用 ax.legend() 函数向图中添加图例。最后,我们使用 ax.set_xlabel()、ax.set_ylabel() 和 ax.set_title() 函数向图中添加轴标签和标题。我们使用 plt.show() 函数显示图。

此代码应创建一个分组条形图,其中包含三组条形、五个类别以及适当的标签、图例和轴标题。您可以修改数据、标签和其他参数以满足您的特定需求。

输出

此图显示了使用 matplotlib 的不同分组条形图

结论

在本教程中,我们通过实际示例逐步向您展示了如何在 Matplotlib 中创建分组条形图。我们涵盖了分组条形图的所有主要方面,包括基本结构、水平分组条形图、堆叠分组条形图以及带有标签和图例的分组条形图。按照本教程中概述的说明,您应该能够为您的研究或数据分析目的创建自己的自定义分组条形图。


相关文章