使用 Pygal 创建堆叠柱状图

2025年03月17日 | 阅读 9 分钟

条形图是可视化和比较不同类别数据的流行方式。当处理多个数据系列共同构成一个整体时,堆叠条形图提供了一个引人注目的解决方案。PyGal 是一个用于创建交互式图表的通用 Python 库,它允许您创建能够有效显示数据分布的堆叠条形图。在本文中,我们将深入探讨 PyGal 中的堆叠条形图,探讨它们的创建、自定义和实际应用。

什么是堆叠条形图?

堆叠条形图是传统条形图的一个变体,它允许您将多个数据系列堆叠在一个条形图上。这使得查看者可以理解每个类别的个体值以及每个数据系列对总数的累积贡献。堆叠条形图特别适用于展示类别内的数据组成。

何时使用堆叠条形图

在必须表示和比较不同类别的数据,同时显示多个数据系列的累积组成时,可以使用堆叠条形图。当您希望同时强调每个类别内的个体值以及每个数据系列对整体的总体贡献时,它们特别有用。以下是一些使用堆叠条形图的常见场景:

  • 数据组成:堆叠条形图非常适合展示构成总值的各个部分。例如,您可以使用它们来显示预算中各项费用的分配、国家电力生产中能源来源的分布,或城市中不同类型犯罪的细分。
  • 市场份额和销售:堆叠条形图经常用于商业领域,以表示不同产品或服务的市场份额或销售数据。它们有助于可视化每个产品/服务对总收入的贡献。
  • 人口统计数据:堆叠条形图显示人口统计数据,例如按年龄组、性别或种族分布的人口。这使您能够了解不同细分群体如何为总人口做出贡献。
  • 调查响应:在分析具有多个选择题的调查数据时,堆叠条形图可以显示每个问题的响应分布。这有助于了解哪些选项在受访者中更受欢迎。
  • 项目管理:堆叠条形图可以可视化项目时间表和资源分配。每个条形代表一个项目阶段,条形内的不同部分代表分配给该阶段的不同任务或资源。
  • 环境数据:堆叠条形图常用于显示环境数据,例如温室气体排放源或废物成分。
  • 财务数据:在金融领域,堆叠条形图可以说明公司在不同时期内的财务业绩细分,例如收入、成本和利润。
  • 教育评估:堆叠条形图可以表示学生在不同科目或测试类别中的表现,帮助教育工作者和管理人员识别优势和劣势领域。
  • 资源分配:堆叠条形图可用于可视化资源(如时间、预算或劳动力)在不同项目或部门之间的分配。
  • 医疗保健数据:堆叠条形图可以显示人群中不同疾病或治疗方法的分布。

请记住,堆叠条形图的关键优势在于它们能够直观且直观地显示个体值和累积值。但是,与任何数据可视化技术一样,应谨慎使用它们,以确保信息清晰且不误导受众。

堆叠条形图的优点

1. 数据构成

堆叠条形图非常适合说明不同组成部分如何构成整体。它们提供了视觉表示,使查看者能够快速掌握单个条形图中每个类别的相对比例。当您希望显示总值的组成(例如预算中的支出或国家能源生产中能源来源的分布)时,此优点特别有用。

2. 跨类别比较

堆叠条形图可以轻松比较不同类别下的多个数据系列。通过将各个部分堆叠在一起,这些图表可以清晰地显示每个类别内的个体值以及累积总数。当您需要比较不同组之间的数据分布(例如产品销售业绩或人口统计数据)时,此功能尤其有用。

3. 突出模式

堆叠条形图可以有效地突出数据中的模式和趋势。例如,在描绘随时间变化时,每个条形可以代表一个不同的时间段,而堆叠的部分可以帮助查看者观察这些时间段内数据分布的变化。这对于揭示比例变化或显示不同因素如何导致总数变化特别有利。

4. 强调总计

堆叠条形图的一个关键优势在于它们能够强调累积总数。当您希望展示不同组成部分对整体的影响或份额时,这可能很有价值。通过可视化每个部分如何累加到总数,您可以帮助查看者理解每个类别在更大背景下的重要性。

5. 简单清晰

堆叠条形图提供了简单清晰的数据表示。它们直观易懂,并且可以在不让受众不知所措的复杂细节的情况下有效地传达复杂信息。这使得它们适用于广泛的受众,包括那些需要更好地掌握数据分析技术的人。

6. 叙事性

堆叠条形图可用于讲述引人入胜、由数据驱动的故事。通过直观地展示不同元素如何促成某个结果或场景,您可以引导您的受众了解您希望传达的叙事。这种叙事方法可以使您的数据更具吸引力和记忆点。

总而言之,堆叠条形图提供了多项优势,使其成为强大的数据可视化工具。它们展示数据构成,促进跨类别比较,并突出模式和趋势。它们对总计的强调、简单性和支持叙事的能力进一步增强了它们在传达有意义的见解方面的有效性。

堆叠条形图的缺点

1. 复杂的数据比较

虽然堆叠条形图在比较类别内的数据方面很有效,但它们可能不太适合比较不同类别之间的绝对值。对累积总数的关注可能需要更清晰地比较个体数据点,尤其是在类别具有显著不同的总数时。

2. 误解

使用堆叠条形图存在误解的可能性。查看者可能更倾向于关注各个部分累积总数之间的差异,而不是每个类别内的个体值。这可能导致对数据细节的理解不准确。

3. 数据集大的限制

当处理许多数据系列或类别时,堆叠条形图可能会变得混乱且难以阅读。随着堆叠的段数增加,条形图可能变得视觉上令人不知所措且难以区分,从而使查看者更难提取有意义的见解。

4. 细节丢失

随着更多数据系列堆叠在单个条形图中,条形图的较低部分可能难以在视觉上分辨。这种细节的丢失可能会阻碍查看者准确解读这些较低部分的具体值,尤其是在数据复杂或细微差别的情况下。

5. 缺乏精确性

由于累积值的固有复杂性,堆叠条形图不太适合精确的数据分析,例如比较精确值。如果您需要执行精确计算或进行精细比较,其他图表类型,如簇状或分组条形图,可能更合适。

6. 颜色依赖性

颜色在堆叠条形图中的有效使用至关重要。糟糕的颜色选择或可访问性问题(如色盲)可能会阻碍理解并使查看者感到困惑。过度依赖颜色来区分各个部分可能会给那些在辨别某些颜色方面存在困难的人带来障碍。

7. 对负值的限制

堆叠条形图不太适合表示负值。当存在负值时,堆叠排列可能导致误导性的解释,因为较低的部分可能位于零基线上方。

8. 关注相对比例

虽然堆叠条形图非常适合显示每个类别内的相对比例,但可能存在更好的选择来显示精确值或绝对数量。如果您的主要目标是传达确切的值,那么分组条形图或简单条形图等图表类型可能更合适。

总之,虽然堆叠条形图具有可视化数据构成和累积贡献等优点,但它们也存在必须仔细考虑的限制。它们可能只适合某些数据和比较,尤其是在涉及精确值、类别之间的直接比较或负值时。使用堆叠条形图时,重要的是确保它们能有效传达预期信息,并且目标受众易于理解。

堆叠条形图的 Python 实现

在此示例中,我们将创建一个简单的堆叠条形图来可视化两个产品(产品 A 和产品 B)在不同区域的销售分布。

1. 导入 Pygal

在本节中,我们导入 Pygal 库,该库提供了创建各种交互式图表的工具,包括堆叠条形图。

2. 准备数据

定义您的数据。在此示例中,我们将使用两个产品在不同区域的样本销售数据。

在这里,我们定义了要可视化的数据。在此示例中,我们有两个数据系列(product_a_sales 和 product_b_sales),代表两个产品在不同区域(regions)的销售情况。

3. 创建堆叠条形图

从 PyGal 创建 StackedBar 类的实例,并设置图表的标题。

我们从 Pygal 库创建了 StackedBar 类的实例。这将是我们用于构建堆叠条形图的对象。我们还将图表命名为“按区域划分的销售分布”。

4. 将数据系列添加到图表

为每个产品将数据系列添加到图表中。

在这里,我们将数据系列添加到图表中。我们指定每个数据系列的标签(产品 A 和产品 B)并提供相应的销售数据(product_a_sales 和 product_b_sales)。

5. 自定义图表

通过设置标签、标题、颜色和其他属性来自定义图表。例如:

在本节中,我们自定义了图表的外观。我们将 x 轴标签设置为 regions 列表,添加 x 轴和 y 轴标题,将图例放置在图表底部,并禁用工具提示的“花哨”模式。

6. 渲染并显示图表

最后,将图表渲染到文件或在浏览器中显示。

最后,我们使用 render_to_file 方法生成一个名为 'stacked_bar_chart.svg' 的 SVG 文件,其中包含渲染后的图表。该文件可以在 Web 浏览器中打开,或嵌入到文档或演示文稿中。

您可以根据您的具体用例修改数据、标签、标题和自定义选项,以创建适合您数据可视化需求的堆叠条形图。

输出

Stacked Bar Charts using Pygal

结论

总而言之,堆叠条形图代表了一种关键的可视化技术,提供了一种直观的方法来理解数据分布和组成。本文提供了使用 PyGal 库构建这些图表的易于理解的蓝图。堆叠条形图非常适合捕捉类别内的相对比例,并在从商业策略到医疗保健分析的各个领域都有应用。

虽然堆叠条形图可以有效地简化复杂的数据集并增强沟通,但承认它们的局限性并遵循设计最佳实践至关重要。通过利用 PyGal 的功能,用户可以创建交互式图表,这些图表可以呈现由数据驱动的见解并促进明智的决策过程。

在不断发展的数据可视化格局中,堆叠条形图仍然是一种通用且适应性强的工具,它随着技术和数据需求的不断发展而发展。在创建有意义的可视化时,请记住堆叠条形图的独特优势和注意事项,让它们在您的数据探索和沟通工作中发挥重要作用。

在动态的数据可视化领域,堆叠条形图继续保持其通用和有影响力的地位。借助 PyGal 的功能,您可以轻松利用它们的潜力,为引人入胜的叙事构建和严格的数据审查做出贡献。当您驾驭视觉叙事的复杂性时,堆叠条形图将成为您可靠的盟友,随时准备揭开复杂的数据线索,并在追求知识驱动的理解方面提供清晰。