Matplotlib pie():绘制饼图(附带实例)
饼图广泛地应用于各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小,所有区块(圆弧)的加和等于 100%。
在 Matplotlib 中,利用 pie() 函数绘制饼图。函数的格式为:
【实例】利用 pie() 函数绘制饼图。

图 1 饼图
饼图将一个圆饼按照各分类的占比划分成多个扇形,整个圆饼代表数据的总量,每个扇形表示该分类占总体的比例大小,所有扇形相加的和等于 100%。饼图适用于表示不同分类在总体中的占比情况,通过弧度大小来比较不同分类的占比大小,尤其在需要突出显示其中某一个部分的占比时。
图 1 的饼图绘制了 2022 年 A 国大选的票数占比情况,可以一目了然地看到候选人的得票占比情况。如果需要突出显示某位候选人的得票占比,可以对饼图进行分离展示。
【实例 2】实现旋转饼图和突出显示。

图 2 突显效果
在绘制饼图的 pie() 函数中,explode 参数用于设置每个扇形到圆心的距离,传入一个与数据列表长度相等的列表,默认每个扇形到圆心的距离都是 0,将想要分离展示的扇形距离设置成一个适合的值,如 0.1,即可将该部分突出展示。
为了展示效果更好,可以使用 startangle 参数对饼图进行旋转(如将分离的扇形旋转到左侧),给 startangle 参数传入一个角度,将饼图逆时针旋转对应的角度,startangle 参数表示的是饼图的起始角度,默认为正右方向,即传统的 x 轴正方形,此方向表示 0°,设置起始角度后可以实现旋转的效果。对扇形进行分离展示后,将 shadow 参数设置为 True,给饼图添加阴影,使饼图更立体,饼图切分的效果会更好。
在对饼图进行分离后,饼图的布局会发生变化,为了控制饼图占用的区域是一个正方形,且避免饼图变成椭圆形,使用 axis('equal')() 函数,传入 'equal' 参数。
在图 2 饼图的基础上,经过设置后,将获胜者 Biden 的得票率突出显示,可以更突出地展示获胜者的得票占比。
【实例】绘制环形饼图。

图 3 环形饼图
饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小,所有区块(圆弧)的加和等于 100%。
在 Matplotlib 中,利用 pie() 函数绘制饼图。函数的格式为:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, labeldistance=1.1, pctdistance=0.6, shadow=False, radius=1, startangle=0, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)各个参数的含义如下表所示:
参数名称 | 描述 |
---|---|
x | 浮点型数组,表示每个扇形的面积。 |
explode | 数组,表示各个扇形之间的间隔,默认值为 0。 |
labels | 列表,表示各个扇形的标签,默认值为 None。 |
colors | 数组,表示各个扇形的颜色,默认值为 None。 |
autopct | 设置饼图内各个扇形的百分比显示格式,%d%% 为整数百分比,%0.1f 为一位小数,%0.1f%% 为一位小数百分比,%0.2f%% 为两位小数百分比。 |
labeldistance | 表示标签标记的绘制位置相对于半径的比例,默认值为 1.1,如小于 1 则绘制在饼图内侧。 |
pctdistance | 类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。 |
shadow | 布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。 |
radius | 设置饼图的半径,默认为 1。 |
startangle | 表示起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 startangle=90 则从 y 轴正方向画起。 |
counterclock | 布尔值,设置指针方向,默认为 True,即逆时针,False 表示顺时针。 |
wedgeprops | 字典类型,默认值为 None,参数字典传递给 wedge 对象用来画一个饼图,例如 wedgeprops={'linewidth': 5} 设置 wedge 线宽为 5。 |
textprops | 字典类型,默认值为 None,传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。 |
center | 浮点类型的列表,默认值为(0,0),用于设置图标中心位置。 |
frame | 布尔类型,默认值为 False;如果是 True,则绘制带有表的轴框架。 |
rotatelabels | 布尔类型,默认值为 False;如果为 True,则旋转每个 label 到指定的角度。 |
【实例】利用 pie() 函数绘制饼图。
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 election_data = {'Biden': 280, 'Trump': 214, 'Others': 528-270-204} candidate = [key for key in election_data] votes = [value for value in election_data.values()] plt.figure(figsize=(10, 10), dpi=100) plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24}, labeldistance=1.05) plt.legend(fontsize=16) plt.title("2022年A国大选票数占比", fontsize=24) plt.show()运行程序,效果如下图所示:

图 1 饼图
饼图将一个圆饼按照各分类的占比划分成多个扇形,整个圆饼代表数据的总量,每个扇形表示该分类占总体的比例大小,所有扇形相加的和等于 100%。饼图适用于表示不同分类在总体中的占比情况,通过弧度大小来比较不同分类的占比大小,尤其在需要突出显示其中某一个部分的占比时。
图 1 的饼图绘制了 2022 年 A 国大选的票数占比情况,可以一目了然地看到候选人的得票占比情况。如果需要突出显示某位候选人的得票占比,可以对饼图进行分离展示。
【实例 2】实现旋转饼图和突出显示。
plt.figure(figsize=(10, 10), dpi=100) explode = (0.1, 0, 0) plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24}, labeldistance=1.05, explode=explode, startangle=90, shadow=True) plt.legend(loc='upper right', fontsize=16) plt.title("2022年A国大选票数占比", fontsize=24) plt.axis('equal') plt.show()运行程序,效果如下图所示:

图 2 突显效果
在绘制饼图的 pie() 函数中,explode 参数用于设置每个扇形到圆心的距离,传入一个与数据列表长度相等的列表,默认每个扇形到圆心的距离都是 0,将想要分离展示的扇形距离设置成一个适合的值,如 0.1,即可将该部分突出展示。
为了展示效果更好,可以使用 startangle 参数对饼图进行旋转(如将分离的扇形旋转到左侧),给 startangle 参数传入一个角度,将饼图逆时针旋转对应的角度,startangle 参数表示的是饼图的起始角度,默认为正右方向,即传统的 x 轴正方形,此方向表示 0°,设置起始角度后可以实现旋转的效果。对扇形进行分离展示后,将 shadow 参数设置为 True,给饼图添加阴影,使饼图更立体,饼图切分的效果会更好。
在对饼图进行分离后,饼图的布局会发生变化,为了控制饼图占用的区域是一个正方形,且避免饼图变成椭圆形,使用 axis('equal')() 函数,传入 'equal' 参数。
在图 2 饼图的基础上,经过设置后,将获胜者 Biden 的得票率突出显示,可以更突出地展示获胜者的得票占比。
【实例】绘制环形饼图。
plt.figure(figsize=(10, 10), dpi=100) explode = (0, 0, 0) plt.pie(votes, labels=candidate, explode=explode, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24}, labeldistance=1.05, pctdistance=0.85, startangle=90) plt.pie([1], radius=0.7, colors='w') plt.legend(loc='upper right', fontsize=16) plt.title("2022年A国大选票数占比", fontsize=24) plt.axis('equal') plt.show()运行程序,效果如下图所示:

图 3 环形饼图