# 绘制华夫饼图

# 华夫饼图亦称为直角饼图,它是饼图的变体,可以直观展示部分与整体的比例。华夫饼图一般由 100 个方格组成,其中每个方格代表 1%, 方格不同的颜色代表不同的分类,常见于比较同类型指标完成比例的场景,例如电影上座率、公司业务实际完成率等。某影院统计的电影《头号玩家》与《黑豹》的上座率如图 8-21 所示。

# matplotlib 中并未提供华夫饼图的绘制函数,但可以结合 pywaffle 包绘制华夫饼图。下面介绍 pywaffle 包的安装和使用方法。

# pywaffle 的安装

# 开发者可以直接使用 pip 命令安装 pywaffle 包。打开命令提示符工具,在提示符的后面输入如下命令 :

pip install pywaffle

# 以上命令执行后,若命令提示符窗口出现如下字样,说明 pywaffle 包安装完成 :

Installing collected packages: pywaffle
Successfully installed pywaffle-0.4.1

# 安装完成后,在提示符的后面输入 python,之后输入如下导入语句进行验证 :

from pywaffle import Waffle

# 执行以上语句后,若命令提示符窗口没有出现任何错误信息,说明 pywaffle 安装成功,否则说明安装失败。

# pywaffle 的使用

# pywaffle 是 Python 中专门绘制华夫饼图的包,它提供了一个继承自 Figure 的子类 Waffle,通过将 Waffle 类传递给 figure() 函数的 FigureClass 参数即可创建华夫饼图。figure() 函数中创建华夫饼图的常用参数的含义如下。

# · FigureClass :可以是 Figure 类或 Figure 子类。
· rows :表示华夫饼图的行数。
· columns :表示华夫饼图的列数。
· values :表示数据,可以接收数组或字典。若 values 参数接收一个字典,则将字典的键作为华夫饼图的图例项。
· colors :表示每个分类数据的颜色列表。
· vertical :表示是否按垂直方向绘制华夫饼图,默认为 False。
· title:表示标题,可以接收一个字典,其中字典的键为 title() 函数的关键字参数。
· legend :表示图例,可以接收一个字典,其中字典的键为 legend() 函数的关键字参数。

# 例如,创建一个 10 行 10 列的华夫饼图,具体代码如下。

plt.figure(
    FigureClass=Waffle,         # 指定画布类为 Waffle
    rows=10,                    # 行数设为 10
    columns=10,                 # 列数设为 10
    values=[45, 55]             # 一组数据
)

# 假设某影院于周六上映了电影《少年的你》,并统计了 1 号观影厅的上座率。下面结合malplotlib 和 pywaffle 绘制一个说明 1 号厅上座率的华夫饼图,示例代码如下。

In [10]:
import matplotlib.pyplot as plt
from pywaffle import Waffle
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 绘制华夫饼图
plt.figure(FigureClass=Waffle, rows=10, columns=lO,
           values=[95, 5], vertical=True, colors=['#20B2AA', '#D3D3D3'],
           title=['label': '电影 《少年的你》 上座率'],
           legend={'loc': 'upper right', 'labels': ['占座', '空座']}
)
plt.show()

# 运行程序,效果如图 8-22 所示。

# 图 8-22 中华夫饼图总共由 100 个方格组成,其中绿色的方格代表上座的比例,灰色的方格代表空座的比例。由图 8-22 可知,电影《少年的你》的上座率为 95%。