3分钟

任务 5 绘制饼状图

任务目的

这一步会介绍饼状图的概念,饼状图的绘制流程以及相关参数。同时会通过全球手机出货量的示例,展示饼状图的具体绘制流程。

任务步骤

1.饼状图介绍

(1)饼状图概述

饼状图常用于统计学模型,用来显示一个数据系列中各项的大小与各项总和的比例。饼状图中各分块的数值不能有负值,所有分块数据总和为100%。为了保证绘图效果,饼状图中各分块的数值都不应该接近零,同时分块的数目不应过多(如果包含多种数据类别,可以把数据量较小或不重要的数据合并成一个“其他”模块)。

(2)饼状图绘制流程

下方的代码绘制了一个简单的饼状图(需要先执行准备实验环境的操作):

plt.pie([1, 2, 3, 4, 5])

运行绘制代码,将会展示一个简单的饼状图:

4-5-1 饼状图绘制示例

图中包含了五项数据,占比分别是1:2:3:4:5,在不指定颜色的情况下,系统会自动生成每一项的颜色。

此例中的饼图默认为椭圆形,这会影响数据的观测效果。添加代码plt.axis("equal"),可以修正饼图的展示效果,尝试运行添加修复后的饼图展示代码:

plt.pie([1, 2, 3, 4, 5])
plt.axis("equal")  # 修正饼图的展示效果

修正后的饼状图效果如下:

4-5-2 修正饼状图展示效果

接下来将通过一个手机出货量的统计数据,展示饼状图的具体应用。

2.示例——统计2019年全球各品牌的手机出货量

下面的代码将会以饼图的形式展示2019年全球各品牌的手机出货量,复制这些代码到单元格中:

# 1.配置实验环境
%matplotlib inline
import matplotlib.pyplot as plt  # 导入pyplot模块
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False  # 解决正负号乱码问题

# 2.准备数据
item_name = ["三星", "华为", "苹果", "小米", "OPPO", "VIVO", "其他"]  # 品牌名
item_quantity = [296.5, 238.5, 196.2, 124.5, 119.8, 113.7, 396.8]  # 各品牌手机全球销量(单位:百万)

# 3.创建画布
plt.figure(figsize=(10, 5), dpi=150)

# 4.绘制饼图
explode = (0, 0, 0, 0, 0, 0, 0.1)  # 突出展示【其他】手机部分
plt.pie(item_quantity, labels=item_name, autopct="%.2f%%", explode=explode)

# 5.修饰图像
plt.title("2019年全球各品牌手机出货量", fontsize=16)  # 添加标题
plt.axis("equal")  # 修正饼图的展示效果
plt.legend()

按下【Shift+Enter】运行单元格,将会展示统计结果的饼状图:

4-5-3 2019年全球各品牌手机出货量饼状图

相比前面的两个图表,此例中的饼状图主要对以下参数进行了调整:

本例中绘制饼状图的代码如下:

plt.pie(item_quantity, labels=item_name, autopct="%.2f%%", explode=explode)

参数item_quantity对应各厂商的手机出货量列表;

参数labels对应厂商的名称列表,此处添加labels参数也是为了方便进行图例展示;

参数autopct可以控制饼图内的百分比设置,设置格式可以参考数据格式化的字符串格式。此例中的值%.2f%表示展示的百分比数据中保留两位小数;

参数explode对应每一分块到中心的距离,其值为元组的形式,值的个数需要与饼图分块数一致。本例中需要突出展示【其他】品牌的手机销量占比,所以定义了同名的explode变量(explode = (0, 0, 0, 0, 0, 0, 0.1)),作为绘制饼图的explode参数值。

为了突出统计图表的标题,本例在添加标题时用到了fontsize参数,此参数的作用是手动定义字体大小(默认值为10):

plt.title("2019年全球各品牌手机出货量", fontsize=16)  # 添加标题

对于图像中展示的各种文本信息(如标题-title、图例-legend、x轴标签-xlabel、y轴标签-ylabel等),都可以使用fontsize参数手动设置标签的字体大小参数。实际绘制图表前,可以通过help()方法了解绘制图表中各函数的可选参数。

至此关于饼状图的介绍已经完成,下一步将会介绍散点图的绘制。