Python matplotlib绘制基础饼状图代码示例

咖啡半糖
咖啡半糖
发布时间:2026-11-02| 6人浏览过
原创

详细讲解如何使用 Python matplotlib 库的 plt.pie() 绘制基础饼状图,提供完整的代码示例、核心参数详解、两种呈现风格对比及常见问题排查。

在 Python 数据可视化中,饼状图常用于直观展示各个组成部分在总体中所占的相对比例。使用 Matplotlib 库的 plt.pie() 函数,开发者只需准备一组数值序列和对应的分类标签,即可快速生成结构清晰的饼图。本文将直接展示基础饼状图的标准绘制流程、完整可运行代码、核心参数配置,以及两种常见展示方案的关键差异与避坑建议。

一、基础饼图的标准绘制步骤

绘制一个标准的 Matplotlib 饼状图通常遵循固定的四个操作环节:引入可视化模块、准备离散数据与分类标签、调用核心绘图方法,以及配置等比显示并渲染。规范的流程不仅能保证图表几何形态不失真,还能使代码结构层次分明、易于维护。

Python matplotlib绘制基础饼状图代码示例
图 1:Matplotlib 基础饼图绘制的四个关键步骤

下面是一段可直接运行的完整基础示例代码。该代码构建了某小型技术团队成员在不同工作任务上的工时分配,并展示各分项所占的百分比:

import matplotlib.pyplot as plt

# 1. 解决中文字体及符号显示问题
plt.rcParams['font.sans-serif'] = ['PingFang SC', 'Microsoft YaHei', 'SimHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False

# 2. 准备基础数据
labels = ['核心功能开发', '代码重构优化', '日常缺陷修复', '文档与技术评审']
sizes = [45, 20, 25, 10]

# 3. 绘制基础饼状图
plt.figure(figsize=(7, 7))
plt.pie(
    sizes,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90
)

# 4. 保持正圆比例并设置标题
plt.axis('equal')
plt.title('技术团队季度工时占比分布', pad=20)

# 5. 输出显示
plt.show()

二、plt.pie() 核心参数作用机制

Matplotlib 的 plt.pie() 方法提供了丰富的参数接口,用以控制扇区的分割逻辑、百分比文字样式、角度偏移以及几何突出效果。深入理解这些核心参数,有助于根据具体数据结构灵活控制输出形态。

Python matplotlib绘制基础饼状图代码示例
图 2:plt.pie() 核心参数与几何控制作用机制

核心参数解析:

  • x:必须的一维数组或列表。传入的数值无需预先转换为百分比,Matplotlib 会自动求和并按 val / sum(val) 转换为对应的圆心角。若数值总和小于 1,则会绘制一个不完整的未闭合饼图。
  • labels:与数据一一对应的字符串序列,默认标注在各扇区的圆弧外缘。
  • autopct:控制扇区内部百分比数值的展示格式。常用字符串格式如 '%1.1f%%'(保留一位小数)或 '%d%%'(取整)。如果不需要显示内部百分比,保持默认的 None 即可。
  • explode:指定各个扇区偏移圆心的距离序列,单位为圆半径的倍数。常用于重点强调某一个或某两个核心项目。
  • startangle:扇区绘制的起始角度。默认值为 0 度(即数学坐标系中 X 轴正方向,水平向右),逆时针展开;通常设定为 startangle=90,使第一个关键扇区从 12 点钟正上方位置展开,符合大多数读者的阅读习惯。

三、两种呈现方式的关键差异与影响

在实际业务中,根据展示目的的不同,饼图主要分为两种呈现风格:默认紧凑型饼图与切片突出型饼图(Explode)。在相同数据源条件下,合理选择结构能显著提升读者的信息获取效率。

Python matplotlib绘制基础饼状图代码示例
图 3:紧凑模式与突出模式的效果与定位对比

关键差异影响:

  1. 视觉注意力的分流与聚合:默认紧凑型饼图将所有分类视作平等维度,读者需要通读所有标签和比例后自行判断谁是主要矛盾;突出型饼图则直接通过几何断层打破对称性,使读者的目光在 0.5 秒内锁定抽离扇区。
  2. 真实比例感知的偏差:在切片突出模式下,当 explode 参数设置过大(例如大于 0.2)时,离群扇区会脱离原有圆形参照系,导致人眼对其弧度和面积的判断产生放大假象。因此,若追求严谨的量化对比,紧凑型更可靠;若重在观点传递与引导,微小的突出(如 0.05 至 0.1)则更有效。

实现切片突出的完整代码示例如下:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['PingFang SC', 'Microsoft YaHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False

labels = ['云服务器', '数据库集群', '对象存储', '网络带宽']
costs = [5200, 3100, 1200, 800]

# 突出第一项“云服务器”,偏离圆心 0.08 倍半径
explode = (0.08, 0, 0, 0)
colors = ['#879B88', '#687D8D', '#9EB0A0', '#BAC7BE']

plt.figure(figsize=(7, 7))
plt.pie(
    costs,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90,
    explode=explode,
    colors=colors,
    shadow=False
)

plt.axis('equal')
plt.title('月度基础设施成本支出分布(重点支出突出)', pad=20)
plt.show()

四、排查要点与避坑总结

在编写 Matplotlib 饼图代码时,初学者常会遇到几个典型的展示异常或代码问题。以下四个检查维度涵盖了开发中最高频的排查项:

Python matplotlib绘制基础饼状图代码示例
图 4:基础饼图开发与排查检查清单

避坑提示:当数据项超过 7 个且存在多个 1%~2% 的细微数值时,文本标签和 autopct 数值极易重叠挤压在一起。此时应优先在 Python 数据处理阶段将低于阈值(如小于 3%)的小项归入“其他”,或改用横向条形图(Horizontal Bar Chart)呈现,能取得更好的阅读体验。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。