# 设置坐标轴的标签、刻度范围和刻度标签

# 坐标轴对数据可视化效果有着直接的影响。坐标轴的刻度范围过大或过小、刻度标签过多或过少,都会导致图形显示的比例不够理想。本节将对坐标轴的标签、刻度范围和刻度标签的设置进行讲解。

# 设置坐标轴的标签

# matplotlib 提供了设置 x 轴和 y 轴标签的方式,下面分别进行介绍。

# 设置 x 轴的标签

# matplotlib 中可以直接使用 pyplot 模块的 xlabel() 函数设置 X 轴的标签,xlabel() 函数的语法格式如下所示 :

xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)

# 该函数各参数含义如下。

# · xlabel :表示 X 轴标签的文本。
· fontdict :表示控制标签文本样式的字典。
· labelpad :表示标签与坐标轴边框 (包括刻度和刻度标签) 的距离。

# 此外,Axes 对象使用 set_xlabel() 方法也可以设置 x 轴的标签。

# 设置 y 轴的标签

# matplotlib 中可以直接使用 pyplot 模块的 ylabel() 函数设置 y 轴的标签,ylabel() 函数的语法格式如下所示 :

ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)

# 该函数的 ylabel 参数表示 y 轴标签的文本,其余参数与 xlabel() 函数的参数的含义相同,此处不再赘述。此外,Axes 对象使用 set_ylabel() 方法也可以设置 y 轴的标签。
假设现在有一个包含正弦曲线和余弦曲线的图表,该图表中设置 X 轴和 y 轴的标签,具体代码如下。

In [1]:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace (-np.pi, np.pi, 256, endpoint=True)
y1, y2 = np.sin(x), np.cos (x)
plt.plot (x, y1, x, y2)
# 设置 x 轴和 y 轴的标签
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.show()

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

image

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

# 当绘制图表时,坐标轴的刻度范围和刻度标签都与数据的分布有着直接的联系,即坐标轴的刻度范围取决于数据的最大值和最小值。在使用 matplotib 绘图时若没有指定任何数据,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 提供了重新设置坐标轴的刻度范围和刻度标签的方式,下面分别进行介绍。

# 设置刻度范围

# 使用 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 轴刻度的最大值。

# 设置刻度标签

# 使用 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 所示。

image

# 实例1: 2019 年中国电影票房排行榜

# 假如你有一段闲暇时间,到影院观影会是个不错的选项。如今,看电影已经成为人们休闲娱乐的方式之一,它不仅是一种视觉享受,而且是一场精神盛宴,使人们放松身心。2019年中国上映了众多口碑不错的电影,对每部电影的总票房进行统计后,得出 2019 年中国电影票房排行榜 Topl5, 如表 3-1 所示。

image

# 根据表 3-1的数据,将“电影名称”一列的数据作为 y 轴的刻度标签,将“总票房(亿元)”一列的数据作为刻度标签对应的数值,使用 barh() 绘制 2019 年中国电影票房排行榜 Top15 的条形图,并为条形图的坐标轴添加标签和刻度标签,具体代码如下。

In [2]:
# 01_film_rankings
import matplotlib.pyplon as plt
plt.rcParams['font.sans-serif'] = ['SiniHei']
plt.reParams["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 所示。

image

# 图 3-5 中,X 轴的标签位于底部,y 轴的标签位于左侧。由图 3-5 可知,电影《哪吒之魔童降世》的总票房最高,《流浪地球》的总票房排第二,《复仇者联盟4:终局之战》的总票房排第三。