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

3.2.2 设置刻度范围和刻度标签

当绘制图表时,坐标轴的刻度范围和刻度标签都与数据的分布有着直接的联系,即坐标
轴的刻度范围取决于数据的最大值和最小值。在使用 matplotlib 绘图时若没有指定任何数据,
x 轴和 y 轴的范围均为 0.05 ~ 1.05,刻度标签均为 [-0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2] ;若指
定了 x 轴和 y 轴的数据,刻度范围和刻度标签会随着数据的变化而变化。matplotlib 提供了重
新设置坐标轴的刻度范围和刻度标签的方式,下面分别进行介绍。
1.设置刻度范围
使用 pyplot 模块的 xlim() 和 ylim() 函数分别可以设置或获取 x 轴和 y 轴的刻度范围。
xlim() 函数的语法格式如下所示 :
xlim(left=None, right=None, emit=True, auto=False, * , xmin=None,
xmax=None)
该函数常用参数的含义如下。
·left :表示 x 轴刻度取值区间的左位数。
·right :表示 x 轴刻度取值区间的右位数。
·emit :表示是否通知限制变化的观察者,默认为 True。
·auto :表示是否允许自动缩放 x 轴,默认为 True。
·xmin :表示 x 轴刻度的最小值。
·xmax :表示 x 轴刻度的最大值。
此外,Axes 对象可以使用 set_xlim() 和 set_ylim() 方法分别设置 x 轴和 y 轴的刻度范围。
2.设置刻度标签
使用 pyplot 模块的 xticks() 和 yticks() 函数分别可以设置或获取 x 轴和 y 轴的刻度线位置
和刻度标签。xticks() 函数的语法格式如下所示 :
xticks(ticks=None, labels=None, ** kwargs)
该函数的 ticks 参数表示刻度显示的位置列表,它还可以设为空列表,以此禁用 x 轴的刻
度 ;labels 表示指定位置刻度的标签列表。
此外,Axes 对象可以使用 set_xticks() 或 set_yticks() 方法分别设置 x 轴或 y 轴的刻度线位置,
使用 set_xticklabels() 或 set_yticklabels() 方法分别设置 x 轴或 y 轴的刻度标签。
在 3.2.1 节绘制的正弦和余弦曲线图中设置坐标轴的刻度范围和刻度标签,增加的代码
如下。
# 设置 x 轴的刻度范围和刻度标签
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$',
r'$0$', r'$\pi/2$', r'$\pi$'])
运行程序,效果如图 3-4 所示。
3.2.3 实例 1 :2019 年中国电影票房排行榜
假如你有一段闲暇时间,到影院观影会是个不错的选项。如今,看电影已经成为人们休
闲娱乐的方式之一,它不仅是一种视觉享受,而且是一场精神盛宴,使人们放松身心。2019
年中国上映了众多口碑不错的电影,对每部电影的总票房进行统计后,得出 2019 年中国电
影票房排行榜 Top15,如表 3-1 所示。

 

根据表 3-1 的数据,将“电影名称”一列的数据作为 y 轴的刻度标签,将“总票房(亿元)”

一列的数据作为刻度标签对应的数值,使用 barh() 绘制 2019 年中国电影票房排行榜 Top15 的
条形图,并为条形图的坐标轴添加标签和刻度标签,具体代码如下。
In [2]:
# 01_film_rankings
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams["axes.unicode_minus"] = False
labels = [" 哪吒之魔童降世 ", " 流浪地球 ", " 复仇者联盟 4: 终局之战 ",
       " 疯狂的外星人 ", " 飞驰人生 ", " 烈火英雄 ", " 蜘蛛侠 : 英雄远征 ",
       " 速度与激情 : 特别行动 ", " 扫毒 2 : 天地对决 ", " 大黄蜂 "," 惊奇队长 ",
       " 比悲伤更悲伤的故事 ", " 哥斯拉 2: 怪兽之王 ", " 阿丽塔 : 战斗天使 ",
       " 银河补习班 "]
bar_width = [48.57, 46.18, 42.05, 21.83, 17.03, 16.70, 14.01, 13.84,
        12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64]
y_data = range(len(labels))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.barh(y_data, bar_width, height=0.2, color='orange')
# 设置 x 轴和 y 轴的标签
ax.set_xlabel(" 总票房 ( 亿元 )")
ax.set_ylabel(" 电影名称 ")
# 设置 y 轴的刻度线位置、 刻度标签
ax.set_yticks(y_data)
ax.set_yticklabels(labels)
plt.show()
运行程序,效果如图 3-5 所示。
图 3-5 中, x 轴的标签位于底部, y 轴的标签位于左侧。由图 3-5 可知,电影《哪吒之
魔童降世》的总票房最高,《流浪地球》的总票房排第二,《复仇者联盟 4 :终局之战》的总

票房排第三。

3.3 添加标题和图例
3.3.1 添加标题
图表的标题代表图表名称,一般位于图表的顶部且与图表居中对齐,可以迅速地让读者
理解图表要说明的内容。matplotlib 中可以直接使用 pyplot 模块的 title() 函数添加图表标题,
title() 函数的语法格式如下所示 :
title(label, fontdict=None, loc='center', pad=None, ** kwargs)
该函数常用参数的含义如下。
·label :表示标题的文本。
·fontdict :表示控制标题文本样式的字典。
·loc :表示标题的对齐样式,包括 'left'、'right' 和 'center' 三种取值,默认取值为 'center',
即居中显示标题。
·pad :表示标题与图表顶部的距离,默认为 None。
此外,Axes 对象还可以使用 set_title() 方法添加图表的标题。
在 3.2.2 节绘制的正弦和余弦曲线图中添加标题“正弦曲线和余弦曲线”,增加的代码如下。
# 添加标题
plt.title(" 正弦曲线和余弦曲线 ")
运行程序,效果如图 3-6 所示。
3.3.2 添加图例
图例是一个列举各组图形数据标识方式的方框图,它由图例标识和图例项两个部分构
成,其中图例标识是代表各组图形的图案;图例项是与图例标识对应的名称(说明文本)。当

matplotlib 绘制包含多组图形的图表时,可以在图表中添加图例,帮助用户明确每组图形代表

的含义。
matplotlib 中可以直接使用 pyplot 模块的 legend() 函数添加图例,legend() 函数的语法格式
如下所示 :
legend(handles, labels, loc, bbox_to_anchor, ncol, title, shadow,
      fancybox, * args, ** kwargs)
该函数常用参数的介绍如下。
(1) handles 和 labels 参数
handles 参数表示由图形标识构成的列表,labels 参数表示由图例项构成的列表。需要注
意的是,handles 和 labels 参数应接收相同长度的列表,若接收的列表长度不同,则会对较长
的列表进行截断处理,使较长列表与较短列表长度相等。
(2) loc 参数
loc 参数用于控制图例在图表中的位置,该参数支持字符串和数值两种形式的取值,每
种取值及其对应的图例位置的说明如表 3-2 所示。
(3) bbox_to_anchor 参数
bbox_to_anchor 参数用于控制图例的布局,该参数接收一个包含两个数值的元组,其中
第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右 ;第二个数
值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上。
(4) ncol 参数
ncol 参数表示图例的列数,默认值为 1。
(5)title 参数
title 参数表示图例的标题,默认值为 None。
(6) shadow 参数
shadow 参数控制是否在图例后面显示阴影,默认值为 None。
(7) fancybox 参数

fancybox 参数控制是否为图例设置圆角边框,默认值为 None。

若使用 pyplot 绘图函数绘图时已经预先通过 label 参数指定了显示于图例的标签,则后
续可以直接调用 legend() 函数添加图例 ;若未预先指定应用于图例的标签,则后续在调用
legend() 函数时为参数 handles 和 labels 传值即可,示例代码如下。
ax.plot([1, 2, 3], label='Inline label')
ax.legend()
#
ax.legend((line1, line2, line3), ('label1', 'label2', 'label3'))
在 3.3.1 节绘制的正弦和余弦曲线图中添加图例,增加的代码如下。
lines = plt.plot(x, y1, x, y2)
# 添加图例
plt.legend(lines, [' 正弦 ', ' 余弦 '], shadow=True, fancybox=True)
运行程序,效果如图 3-7 所示。

猜你喜欢

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