饼图的基本概念:

核心定义

饼图(Pie Chart)是一种用于表示数据分类相对大小(比例型数据)的可视化图形,核心作用是直观展示“不同分类数据与整体数据的占比关系”。其核心逻辑为用“整个圆形”来代表数据的总量(100%),所有分类的数值之和必须能构成这个“整体”。

构成要素及含义:

构成要素

具体含义

整个圆形

代表数据的总和(整体),无论实际数值是多少(如 100 人、1000 万销售额),都被视为 “100%”。

内部扇形

代表数据的单个分类(部分),扇形的面积(或对应的圆心角)大小,直接对应该分类占整体的比例(面积越大,占比越高)。

扇形标签

标注每个扇形对应的分类名称明确识别每个部分的含义。

比例 / 数值标注

(通常配合标签使用)显示该分类的具体占比(如 25%)或实际数值(如 25 人),补充 “扇形大小” 的量化信息。

饼图的核心用途(适用场景):

1、需直观展示“部分—整体”的比例关系(如“各产品营收占总营收的比例”“各年龄段用户占总用户的比例”);

2、需突出“关键分类的占比优势”(如“某产品占总营收的60%是核心收入来源”);

3、分类数量不宜过多(通常建议≤6 类),否则扇形会过于拥挤,失去可视化的简洁性。

实例 1:绘制基础饼图(带百分比和图例)

数据:某公司各部门员工占比

使用pyplot模块中的函数pie()绘制饼图。默认情况下,pyplot的pie()功能沿逆时针方向排列饼图中的饼形或楔形。

第一个参数传入用于绘制饼图的数据列表,其他参数都是关键字参数。Labels(departments)参数用于设置每个扇形的标签,说明每个扇形的数据归属。autopct参数用于设置饼图中的百分比,一般保留两位小数,传入"%1.2f%%"即可。startangle 参数用于设置饼图的起始绘制角度(以x轴正方向为0度,逆时针旋转)。

代码:

import matplotlib.pyplot as plt



# 部门名称列表(标签数据)

departments = ['技术部', '市场部', '财务部', '人力资源部']

# 各部门员工数量

employees = [45, 25, 15, 15]

# 自定义颜色列表(为每个部门分配不同颜色)

colors = ['blue', 'red', 'green', 'yellow']



# 设置中文字体,确保中文正常显示

plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC", "Microsoft YaHei"]



# 创建画布

plt.figure(figsize=(8, 6))

# 绘制饼图(包含labels和colors参数)

plt.pie(

    employees,

    labels=departments,  # 显示部门名称标签

    colors=colors,       # 应用自定义颜色

    autopct='%1.2f%%',   # 显示百分比

    startangle=90        # 从正上方开始绘制

)



plt.axis('equal')                  # 保证饼图为正圆形

plt.title('公司各部门员工占比分布')  # 图表标题

plt.legend(title='部门', loc='lower right')  # 显示图例

# 显示图形

plt.show()

上面的饼图绘制了公司各部门员工的占比情况,明确显示技术部占比45.00%、市场部占比25.00%财务部占比15.00%、人力资源部占比15.00%,饼图用于展示数据的分布和比例关系,每个扇形的面积大小表示该组分在整体中所占的比例可以一目了然地看到各个部门员工的占比情况。

实例 2:突出显示特定部分

数据:某产品销售渠道占比

代码:

在绘制饼图的pie()函数中,explode参数用于设置每个扇形到圆心的距离,传入一个与数据列表长度相等的列表,默认每个扇形到圆心的距离都是0,将想要分离展示的扇形距离设置成一个适合的值,如0.1,即可将该部分突出展示。

对扇形进行分离展示后,将shadow参数设置为True,给饼图添加阴影,使饼图更立体,饼图切分的效果会更好。

在对饼图进行分离后,饼图的布局会发生变化,为了控制饼图占用的区域是一个正方形,且避免饼图变成椭圆形,使用axis('equal')函数,传入'equal'参数。

import matplotlib.pyplot as plt



channels = ['线上商城', '实体店', '代理商', '其他']

sales = [55, 25, 15, 5]

# 定义各部分的分离距离,0.1表示将第一个部分(线上商城)向外分离10%半径的距离

explode = [0.1, 0, 0, 0]



plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]



plt.figure(figsize=(8, 6))

plt.pie(sales,

        explode=explode, # 设置各部分的分离效果,突出显示重要部分

        labels=channels,

        autopct='%1.1f%%',

        shadow=True,       # 添加阴影效果

        colors=['#ff9999','#66b3ff','#99ff99','#ffcc99']) #十六进制色值



# 设置坐标轴比例相等,确保饼图显示为正圆形(否则可能呈现椭圆形)

plt.axis('equal')

plt.title('产品销售渠道占比分析')

plt.show()

这张“产品销售渠道占比分析”饼图呈现了不同销售渠道在整体销售中所占的比例情况:

线上商城:占比高达55.0%,是该产品最主要的销售渠道,说明线上销售模式在产品推广和销售中占据主导地位。

实体店:占比为25.0%,作为传统销售渠道,仍占据一定份额。

代理商:占比15.0%,通过代理商进行销售,能够借助代理商的资源和渠道拓展市场。

其他:占比5.0%,这部分可能涵盖了一些小众、新兴或者尚未明确分类的销售渠道,虽然占比小,但也反映出销售渠道存在一定的多样性。

实例3:绘制环形饼图(圆环图)

环形饼图相比普通饼图更适合展示分类数据的占比关系,同时中间的空白区域可以有效利用来显示总标题或关键数据。

数据:某网站流量来源分布

代码:

要绘制环形的饼图,可借助pie()函数,通过`wedgeprops` 参数来设置圆环宽度,以此实现环形效果,无需绘制两个饼图。因为环形饼图是通过设置圆环宽度实现的,阴影展示会不完全,看起来比较别扭,所以不设置 `shadow` 参数,去掉阴影。另外,`pie()` 函数中的 `pctdistance` 参数用于设置百分比显示离圆心的距离,默认值是 `0.6`,设置环形效果时,可将 `pctdistance` 参数增大,使百分比显示在环形的中间。

import matplotlib.pyplot as plt



traffic_sources = ['直接访问', '搜索引擎', '社交媒体', '外部链接', '广告推广']

percentages = [30, 25, 15, 18, 12]

# 设置中文字体

plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]

# 自定义颜色

colors = ['#ff6b6b', '#4ecdc4', '#45b7d1', '#ffaaa5', '#feca57']

# 创建画布

plt.figure(figsize=(8, 8))

# 绘制饼图,通过wedgeprops参数设置圆环宽度

wedges, texts, autotexts = plt.pie(

    percentages,

    labels=traffic_sources,

    colors=colors,

    autopct='%1.1f%%',  # 显示百分比

    startangle=140,     # 起始角度

    pctdistance=0.85,   # 百分比标签距离中心的位置

    wedgeprops=dict(width=0.3, edgecolor='w')  # width控制圆环宽度,edgecolor设置边缘颜色

)



# 美化文本

plt.setp(texts, size=12)          # 设置标签字体大小

plt.setp(autotexts, size=10, color='white', weight='bold')  # 设置百分比文本样式

# 添加中心文本(环形中间的文字)

plt.text(0, 0, '流量来源分布', ha='center', va='center', fontsize=14, weight='bold')

# 保证图形为正圆形

plt.axis('equal')

# 添加标题

plt.title('网站访问流量来源占比', fontsize=16, pad=20)

plt.show()

“网站访问流量来源占比”饼图展示了不同渠道为网站带来流量的比例情况

直接访问:占比达到30%,是所有渠道中占比最高的。

搜索引擎:占比25%,是第二大流量来源渠道。

外部链接:占比18%,意味着其他网站的链接为该网站带来了不少流量。

社交媒体:占比15%,显示出社交媒体平台也为网站贡献了一定的流量。

广告推广:占比12%,相比其他渠道,占比相对较低。

更多推荐