首页 > 编程笔记 > Python笔记 阅读:7

Matplotlib pie()绘制直方图(非常详细,附带实例)

饼形图常用来显示各部分所占整体的比例。例如,在工作中如果遇到需要计算各部分金额占总额的比例时,一般通过各部分金额与总额相除来计算,但这种比例表示方法很抽象,而通过饼形图可以直接显示各个组成部分所占整体的比例,一目了然。

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 基础饼形图

相关文章