使用Matplotlib在Python中绘制100%堆叠条形图和柱状图

2025年1月5日 | 阅读 4 分钟

Python 是一种高级、解释型编程语言,以其简洁性和可读性而闻名。Python 由 Guido van Rossum 创建,于 1991 年首次发布,通过使用大的缩进强调代码清晰度。它支持多种编程范式,包括过程式、面向对象式和函数式编程。Python 庞大的标准库和大量的第三方程序生态系统使其能够灵活地应用于各种领域,包括 Web 开发、数据分析、人工智能、科学计算等。其动态类型和自动内存管理简化了开发,而列表推导式和生成器表达式等功能增强了其表达能力。Python 的广泛采用也得益于其活跃的社区和强大的文档。

了解 Matplotlib 库

Matplotlib 是 Python 中一个强大且广泛使用的库,用于创建静态、交互式和动态可视化。它由 John D. Hunter 于 2003 年开发,提供了一个面向对象的 API,用于将图形嵌入到使用标准 GUI 工具包(如 Tkinter、wxPython 和 PyQt)的应用程序中。Matplotlib 高度可定制,允许用户修改图形的几乎所有方面,从基本的线图到复杂的多图。

Matplotlib 库的一些主要特性

  • 多功能性:支持多种多样的图形,包括线图、条形图、直方图、散点图、3D 图等。
  • 集成性:它与其他 Python 库(如 NumPy、Pandas 和 SciPy)无缝协作,用于数据处理和分析。
  • 可定制性:此选项提供了广泛的选项来个性化图形美学,包括颜色、标签、线型和注释。
  • 子图:方便创建用于精确多方面数据可视化的复杂子图网格布局。
  • 交互性:包括对 Jupyter Notebook 中交互式图形的支持以及与交互式后端集成。

Matplotlib 提供的不同类型的图表

  • 线图:显示通过直线连接的数据点。
  • 散点图:显示独立的数据点。
  • 条形图:用方形条表示分类数据。
  • 水平条形图:用水平条表示分类数据。
  • 直方图:显示数据集的分布。
  • 饼图:显示一个整体的比例,如饼图的切片。
  • 箱线图:根据五数概括显示数据集的分布。
  • 面积图:类似于线图,但线条下方的区域被填充。
  • 3D 图:以三维方式显示数据。

使用 Matplotlib 绘制 100% 堆积条形图和柱形图

方法 1:手动归一化

在此方法中,您手动归一化数据,使每个堆积条形图的总和达到 100%。这包括计算每个组内每个类别的比例。

示例

输出

Plotting 100% Stacked Bar and Column Charts Using Matplotlib in Python

说明

  • 数据准备:数据准备在一个二维 numpy 数组中,其中每行代表一个组,每列代表一个类别。
  • 归一化:通过将每个元素除以其行的总和来对值进行归一化。这确保了每个组的总和等于 1(或 100%)。
  • 堆积条形图:使用 `bottom` 参数将条形图堆叠在彼此之上,以跟踪累积高度。
  • 堆积柱形图:这类似于条形图,但它使用 `left` 参数水平堆叠条形图。

方法 2:使用 Pandas 进行数据操作

此技术利用 Pandas 进行数据操作和归一化,使代码更具可读性和简洁性。

示例

输出

Plotting 100% Stacked Bar and Column Charts Using Matplotlib in Python

说明

  • 数据准备:数据存储在 Pandas DataFrame 中,这简化了处理和操作。
  • 归一化:使用带有 lambda 函数的 `apply` 方法对每一行进行归一化,使其总和等于 1(或 100%)。
  • 堆积条形图:使用 `kind='bar'` 和 `stacked=True` 的 `plot` 方法生成堆积条形图。
  • 堆积柱形图:类似于条形图,但使用 `kind='barh'` 表示水平条形图。