Python matplotlib绘制基础饼状图代码示例
详细讲解如何使用 Python matplotlib 库的 plt.pie() 绘制基础饼状图,提供完整的代码示例、核心参数详解、两种呈现风格对比及常见问题排查。
在 Python 数据可视化中,饼状图常用于直观展示各个组成部分在总体中所占的相对比例。使用 Matplotlib 库的 plt.pie() 函数,开发者只需准备一组数值序列和对应的分类标签,即可快速生成结构清晰的饼图。本文将直接展示基础饼状图的标准绘制流程、完整可运行代码、核心参数配置,以及两种常见展示方案的关键差异与避坑建议。
一、基础饼图的标准绘制步骤
绘制一个标准的 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() 方法提供了丰富的参数接口,用以控制扇区的分割逻辑、百分比文字样式、角度偏移以及几何突出效果。深入理解这些核心参数,有助于根据具体数据结构灵活控制输出形态。
核心参数解析:
- x:必须的一维数组或列表。传入的数值无需预先转换为百分比,Matplotlib 会自动求和并按
val / sum(val)转换为对应的圆心角。若数值总和小于 1,则会绘制一个不完整的未闭合饼图。 - labels:与数据一一对应的字符串序列,默认标注在各扇区的圆弧外缘。
- autopct:控制扇区内部百分比数值的展示格式。常用字符串格式如
'%1.1f%%'(保留一位小数)或'%d%%'(取整)。如果不需要显示内部百分比,保持默认的None即可。 - explode:指定各个扇区偏移圆心的距离序列,单位为圆半径的倍数。常用于重点强调某一个或某两个核心项目。
- startangle:扇区绘制的起始角度。默认值为 0 度(即数学坐标系中 X 轴正方向,水平向右),逆时针展开;通常设定为
startangle=90,使第一个关键扇区从 12 点钟正上方位置展开,符合大多数读者的阅读习惯。
三、两种呈现方式的关键差异与影响
在实际业务中,根据展示目的的不同,饼图主要分为两种呈现风格:默认紧凑型饼图与切片突出型饼图(Explode)。在相同数据源条件下,合理选择结构能显著提升读者的信息获取效率。
关键差异影响:
- 视觉注意力的分流与聚合:默认紧凑型饼图将所有分类视作平等维度,读者需要通读所有标签和比例后自行判断谁是主要矛盾;突出型饼图则直接通过几何断层打破对称性,使读者的目光在 0.5 秒内锁定抽离扇区。
- 真实比例感知的偏差:在切片突出模式下,当
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 饼图代码时,初学者常会遇到几个典型的展示异常或代码问题。以下四个检查维度涵盖了开发中最高频的排查项:
避坑提示:当数据项超过 7 个且存在多个 1%~2% 的细微数值时,文本标签和 autopct 数值极易重叠挤压在一起。此时应优先在 Python 数据处理阶段将低于阈值(如小于 3%)的小项归入“其他”,或改用横向条形图(Horizontal Bar Chart)呈现,能取得更好的阅读体验。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









