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_rankingsimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams["axes.unicode_minus"] = Falselabels = [" 哪吒之魔童降世 ", " 流浪地球 ", " 复仇者联盟 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 所示。
Python 数据可视化——图表辅助元素的定制
猜你喜欢
转载自blog.csdn.net/qq_43416206/article/details/132262760
今日推荐
周排行