Skip to content

Matplotlib - 饼图

饼图(Pie Chart)将单个系列的数据显示为圆形的切片,其中每个切片的大小(角度)与其相对于所有项目总和的值成比例。它们用于显示整体的构成。

注意: 虽然饼图在视觉上很简单,但可能具有误导性,尤其是在比较大小相似的切片或类别很多时。对于比较数量而言,柱状图(Bar Chart)通常是更好的替代方案。主要在显示少量类别的“部分-整体”关系时使用饼图。

ax.pie() 方法(面向对象 API)用于生成饼图。

参数说明
x一个包含数据值(切片大小)的一维类数组对象。Matplotlib 会自动计算百分比。
labels一个字符串列表,为每个切片提供标签。
colors一个颜色序列,用于切片。如果为 None,则使用默认颜色循环。
autopct一个字符串或函数,用于格式化显示在每个切片上的数值。常见格式:'%1.1f%%'(显示一个小数位的百分比)。
explode一个与 x 长度相同的元组或列表,指定每个切片偏移半径的比例。用于强调某个切片(例如,(0, 0.1, 0, 0) 偏移第二个切片)。
startangle逆时针旋转第一个切片的起始位置,相对于 x 轴(默认 0 度)。
shadow如果为 True,则在饼图下方绘制阴影。
pctdistance绘制 autopct 文本的半径比例(默认 0.6)。
labeldistance绘制标签的半径比例(默认 1.1)。

让我们可视化学生在不同编程语言课程中的分布。

import matplotlib.pyplot as plt
import numpy as np
# 数据:编程语言和学生人数
languages = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23, 17, 35, 29, 12]
# 创建 Figure 和 Axes
fig, ax = plt.subplots(figsize=(7, 7)) # 方形图对饼图更友好
# 稍微突出 'Python' 切片
explode = (0, 0, 0, 0.1, 0) # 0.1 表示半径偏移 10%
# 创建饼图
wedges, texts, autotexts = ax.pie(
students,
labels=languages,
autopct='%1.1f%%', # 百分比显示的格式
startangle=90, # 从 90 度 (顶部) 开始绘制第一个切片
explode=explode, # 应用突出效果
shadow=True, # 添加阴影
colors=['gold', 'lightcoral', 'lightskyblue', 'lightgreen', 'yellowgreen'] # 可选的自定义颜色
)
# 确保饼图是圆形
ax.axis('equal')
# 添加标题
ax.set_title('Student Enrollment by Programming Language')
# 优化布局
plt.tight_layout()
plt.show()

此代码生成一个饼图,显示报名每种语言的学生比例。通过设置 explode 参数,‘Python’ 切片稍微偏移(突出)以示强调。每个切片上显示百分比,标签标识语言,添加了阴影效果,并且 ax.axis('equal') 确保图表是圆形而不是椭圆形。

ax.pie 函数返回三个列表:wedges(表示切片的 Patch 对象),texts(表示标签的 Text 对象),和 autotexts(表示数值标签的 Text 对象),如果需要进一步自定义,可以使用这些对象。