3.6.3 Python 数据可视化——图表辅助元素的定制

3.6.3 实例 5 :2013—2019 财年阿里巴巴淘宝和天猫平台的 GMV(添

加注释文本)

虽然柱形图中可以通过柱形的高度反映每组数据的多少,但是仍然无法让用户精准地知
道具体数值。因此,柱形图经常会与注释文本配合使用,在柱形的顶部标注具体数值。2.2.2
节实例中的柱形图描述了阿里巴巴淘宝和天猫平台的 GMV,但图中的矩形条缺少具体的数
值,因此这里将在柱形图中添加无指向型注释文本,代码如下。
In [6]:
# 05_taobao_and_tianmao_GMV
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.arange(1, 8)
y = np.array([10770, 16780, 24440, 30920, 37670, 48200, 57270])
bar_rects = plt.bar(x, y, tick_label=["FY2013", "FY2014", "FY2015",
             "FY2016", "FY2017", "FY2018", "FY2019"], width=0.5)
# 添加无指向型注释文本
def autolabel(rects):
  """ 在每个矩形条的上方附加一个文本标签 , 以显示其高度 """
  for rect in rects:
    height = rect.get_height()   # 获取每个矩形条的高度
    plt.text(rect.get_x() + rect.get_width() / 2, height + 300,
         s='{}'.format(height),
         ha='center', va='bottom')
autolabel(bar_rects)
plt.ylabel('GMV( 亿元 )')
plt.show()
运行程序,效果如图 3-17 所示。
与图 2-6 相比,图 3-17 的柱形图增加了 y 轴的标签和注释文本,帮助用户准确地知道
各柱形对应的数值。 a8e87b9c9d9a499bbc603ebdd2faa01b.png
3.7 添加表格
3.7.1 添加自定义样式的表格
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 所示。 ce098f5ca17147688fbb17d0697326b3.png
3.7.2 实例 6 :果酱面包配料比例
美好的一天从早餐开始,果酱面包是常见的早餐且深受大家喜爱,无论是大人还是小孩
都很爱吃。已知某果酱面包需要准备的配料如表 3-4 所示。 e5b76707c69c463a8ec111a4f2b36168.png

根据表 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 所示。

6061b6edec0949e09a7c617df509a322.png 

图 3-19 中,表格位于饼图的下方。由图 3-19 可知,蓝色和红色扇形的面积最大,说明

苹果酱和面粉在果酱面包中占比最大,重量都为 250 g。

3.8 本章小结
本章主要介绍了图表辅助元素的定制,包括认识常用的辅助元素,设置坐标轴的标签,
设置刻度范围和刻度标签,添加标题和图例,显示网格,添加参考线和参考区域,添加注释
文本,添加表格。通过学习本章的内容,读者能熟悉常见图表辅助元素的用途和用法,可以

为图表选择合适的辅助元素。

 
3.9 习题
 
一、填空题
1.图表的辅助元素是指除了根据数据绘制的    之外的元素。
2.图例是一个列举图表中各组图形    方式的方框图。
3.指向型注释文本是通过    的注释方式对图形进行解释的文本。
4.    是标记坐标轴上特殊值的一条直线。
5.matplotlib 自带的引擎可以自动识别数学字符串,并将该数学字符串解析成相应的
    。
二、判断题
1.matplotlib 中图例一直位于图表的右上方,它的位置是不可变的。(  )
2.参考线可以为图形数据与特殊值之间的比较提供参考。(  )
3.坐标轴的标签代表图表名称,一般位于图表顶部居中的位置。(  )
4.若坐标轴没有刻度,则无法显示网格。(  )
5.坐标轴的刻度范围取决于数据的最大值和最小值。(  )
三、选择题
1.关于图表的辅助元素,下列描述错误的是(  )。
A.标题一般位于图表的顶部中心,可以帮助用户理解图表要说明的内容
B.参考区域是标记坐标轴上特殊值的一条直线
C.图例由图例标识和图例项构成,可以帮助用户理解每组图形的含义
D.表格主要用于强调比较难以理解的数据
2.下列函数中,可以设置坐标轴刻度标签的是(  )。
A.xlim()
B.grid ()
C.xticks()
D.axhline()
3.当使用 pyplot 的 legend() 函数添加图例时,可以通过以下哪个参数控制图例的列数?
(  )
A.loc
B.ncol
C.bbox_to_anchor D.fancybox
4.下列选项中,可以为图表添加一条值为 1.5 的水平参考线的是(  )。
A.
plt.axhline(y=1.5, ls='--', linewidth=1.5)
B.
plt.axhline(y=1, ls='--', linewidth=1.5)
C.
plt.axvline(x=1.5, ls='--', linewidth=1.5)
D.
plt.axvline(x=1, ls='--', linewidth=1.5)
5.请阅读下面一段代码 :
r'$\alpha^i < \beta^i$'
以上代码对应的数学公式为(  )。
A. α i > β i
B. α i > β i
C. α i < β i
D. α i < β i
四、简答题
1.请简述指向型和无指向型注释文本的区别。
2.请列举图表常用的辅助元素及其作用。
五、编程题
1.在第 2 章编程题第 1 题的基础上定制柱形图,具体要求如下 :
(1)设置 y 轴的标签为“平均成绩(分)”;
(2)设置 x 轴的刻度标签位于两组柱形中间 ;
(3)添加标题为“高二男生、女生的平均成绩”;
(4)添加图例 ;
(5)向每个柱形的顶部添加注释文本,标注平均成绩。
2.在第 2 章编程题第 2 题的基础上定制饼图,具体要求如下 :
(1)添加标题为“拼多多平台子类目的销售额”;
(2)添加图例,以两列的形式进行显示 ;
(3)添加表格,说明子类目的销售额。

猜你喜欢

转载自blog.csdn.net/qq_43416206/article/details/132262980