Matplotlib pie()绘制直方图(非常详细,附带实例)
饼形图常用来显示各部分所占整体的比例。例如,在工作中如果遇到需要计算各部分金额占总额的比例时,一般通过各部分金额与总额相除来计算,但这种比例表示方法很抽象,而通过饼形图可以直接显示各个组成部分所占整体的比例,一目了然。
Matplotlib 绘制饼形图主要使用 pie() 函数,语法格式如下:
【实例 1】绘制简单饼形图,程序代码如下:

图 1 简单饼形图
饼形图也存在各种类型,主要包括基础饼形图、分裂饼形图、立体感带阴影的饼形图、环形图、内嵌环形图等。
【实例 2】通过饼形图分析各区域销量占比情况,程序代码如下:

图 2 基础饼形图
Matplotlib 绘制饼形图主要使用 pie() 函数,语法格式如下:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)参数说明见下表:
参数 | 说明 |
---|---|
x | 每一块饼形图的比例,如果 sum(x)>1,则会使用 sum(x) 进行归一化。 |
labels | 每一块饼形图外侧显示的说明文字。 |
explode | 每一块饼形图与中心的距离。 |
startangle | 起始绘制角度,默认从 x 轴正方向逆时针绘制,如设置值为 90,则从 y 轴正方向开始绘制。 |
shadow | 指明是否在饼形图下面画一个阴影,默认值为 False,即不画阴影。 |
labeldistance | 标记绘制位置相对于半径的比例,默认值为 1.1,如小于 1 则绘制在饼形图内侧。 |
autopct | 设置饼形图百分比,可以使用格式化字符串或 format() 函数。如 '%1.1f' 表示保留小数点后 1 位。 |
pctdistance | 类似于 labeldistance 参数,指定百分比形式的位置刻度,默认值为 0.6。 |
radius | 饼形图半径,默认值为 1。 |
counterclock | 指定指针方向,布尔值,可选参数,默认值为 True,表示逆时针;如果值为 False,则表示顺时针。 |
wedgeprops | 字典类型,可选参数,默认值为 None,是传递给 wedge 对象的参数,用来绘制一个饼形图。例如 wedgeprops={'linewidth': 2} 表示设置 wedge 线宽为 2。 |
textprops | 设置标签和比例文字的格式,字典类型,可选参数,默认值为 None,是传递给 text 对象的字典参数。 |
center | 浮点型列表,可选参数,默认值为(0,0),表示图表的中心位置。 |
frame | 布尔值,可选参数,默认值为 False,不显示轴框架(也就是网格);如果值为 True,则显示轴框架,与 grid() 函数配合使用。实际应用中建议使用默认值,因为显示轴框架会干扰饼形图效果。 |
rotatelabels | 布尔值,可选参数,默认值为 False;如果值为 True,则旋转每个标签到指定的角度。 |
【实例 1】绘制简单饼形图,程序代码如下:
# 导入matplotlib模块 import matplotlib.pyplot as plt x = [2,5,12,70,2,9] # x轴数据 plt.pie(x, autopct='%1.1f%%') # 绘制饼形图 plt.show() # 显示图表运行程序,结果如下图所示:

图 1 简单饼形图
饼形图也存在各种类型,主要包括基础饼形图、分裂饼形图、立体感带阴影的饼形图、环形图、内嵌环形图等。
【实例 2】通过饼形图分析各区域销量占比情况,程序代码如下:
# 导入相关模块 import pandas as pd from matplotlib import pyplot as plt # 读取Excel文件 df1 = pd.read_excel(io='../../datas/address.xlsx', sheet_name='Sheet2') plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题 plt.figure(figsize=(5, 3)) # 设置画布大小 labels = df1['省'] sizes = df1['销量'] # 设置每块饼形图的颜色 colors = ['red', 'yellow', 'slateblue', 'green', 'magenta', 'cyan', 'darkorange', 'lawngreen', 'pink', 'gold'] plt.pie(sizes, # 绘图数据 labels=labels, # 添加饼形图说明文字 colors=colors, # 设置饼形图的自定义填充色 labeldistance=1.02, # 标记绘制位置相对于扇形半径的比例 autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数 startangle=90, # 设置饼形图的初始角度 radius=0.5, # 设置饼形图的半径 center=(0.2, 0.2), # 设置饼形图的中心位置 textprops={'fontsize': 9, 'color': 'k'}, # 设置文本标签的属性值 pctdistance=0.6) # 设置位置刻度 # 设置x, y轴刻度一致,保证饼形图为圆形 plt.axis('equal') plt.title('各区域销量占比情况分析') # 图表标题 plt.show() # 显示图表运行程序,结果如下图所示:

图 2 基础饼形图