# 添加表格

# 添加自定义样式的表格

# matplotlib 可以绘制各种各样的图表,以便用户发现数据间的规律。为了更加凸显数据间的规律与特点,便于用户从多元分析的角度深入挖掘数据潜在的含义,可将图表与数据表格结合使用,使用数据表格强调图表某部分的数值。matplotlib 中提供了为图表添加数据表格的函数 table() ,该函数的语法格式如下所示:

table(cellText=None, cellColours=None, cellLoc='right', colWidths=None,
      rowLabels=None, rowColours=None, rowLoc='left', colLabels=None,
      colColours=None, colLoc='center', loc='bottom', bbox=None,
      edges='closed', **kwargs)

# 该函数常用参数表示的含义如下。

# · cellText :表示表格单元格中的数据,是一个二维列表。
· cellColours :表示单元格的背景颜色。
· cellLoc :表示单元格文本的对齐方式,支持 'left'、'right' 和 'center' 三种取值,默认值为 'right'。
· colWidths :表示每列的宽度。
· rowLabels :表示行标题的文本。
· rowColours :表示行标题所在单元格的背景颜色。
· rowLoc :表示行标题的对齐方式。
· colLabels :表示列标题的文本。
· colColours :表示列标题所在单元格的背景颜色。
· colLoc :表示列标题的对齐方式。
· loc :表示表格与绘图区域的对齐方式。

# 此外,还可以使用 Axes 对象的 table() 方法为图表添加数据表格,此方法与 table() 函数的用法相似,此处不再赘述。
在 3.6.2 节绘制的正弦和余弦曲线图中添加数据表格,增加的代码如下。

# 添加表格
plt.table(cellText=[[6, 6, 6], [8, 8, 8]],
          colWidths=[0.1] * 3,
          rowLabels=['第1行', '第2行'],
          colLabels=['第1列', '第2列', '第3列'], loc='lower right')

# 运行程序,效果如图 3-18 所示。

image

# 实例6:果酱面包配料比例

# 美好的一天从早餐开始,果酱面包是常见的早餐且深受大家喜爱,无论是大人还是小孩都很爱吃。已知某果酱面包需要准备的配料如表 3-4 所示。

image

# 根据表 3-4 的数据,将“配料名称”一列的数据作为图例项,将“重量”一列的数据与总重量的比例作为数据,使用 pie() 绘制果酱面包配料比例的饼图,并将各种配料的重量以数据表格的形式添加到图表中,方便用户了解各种配料的占比和重量,具体代码如下。

In [7]:
# 06_jam_bread_ingredients
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
kinds =['面粉', '全麦粉', '酵母', '苹果酱', '鸡蛋', '黄油', '盐', '白糖']
weight = [250, 150, 4, 250, 50, 30, 4, 20]
total__weight = 0
for i in weight:
    total_weight += i
batching_scale = [i / total_weight for i in weight]
plt.pie(batching_scale, autopct='%3.1f%%')
plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.1, 1.1])
# 添加表格
plt.table(cellText=[weight],
          cellLoc='center',
          rowLabels=['重量(g)'],
          colLabels=kinds,
          loc='lower center')
plt.show()

# 运行程序,效果如图 3-19 所示。

image

# 图 3-19 中,表格位于饼图的下方。由图 3-19 可知,蓝色和红色扇形的面积最大,说明苹果酱和面粉在果酱面包中占比最大,重量都为 250 g。