Matplotlib 刻度标签函数
有些情况下,坐标轴默认的刻度标签并不能满足我们的开发需求。在 Matplotlib 中,我们可以使用 xticks() 函数来定义 x 轴的刻度标签,也可以使用 yticks() 函数来定义 y 轴的刻度标签。
语法:
plt.xticks(
ticks,
labels,
rotation=None,
fontsize=None,
color=None,
...
)
plt.yticks(
ticks,
labels,
rotation=None,
fontsize=None,
color=None,
...
)说明:
xticks() 和 yticks() 都可以接收多个参数,但最常用的两个是 ticks 和 labels。
ticks(必选):表示 “刻度值”。它是一个列表或可迭代对象(如 range 对象、NumPy 数组 等),用于指定刻度在轴上的位置。labels(可选):表示 “标签值”。它也是一个列表或可迭代对象,包含了与 ticks 中的刻度值一一对应的标签文本。labels 列表的长度必须与 ticks 列表的长度相同。rotation(可选):用于旋转刻度标签的角度。可以是一个浮点数(表示角度)或 'vertical'、'horizontal' 等字符串。fontsize(可选):用于设置刻度标签的字体大小。可以是一个数值或者 'small'、'medium'、'large' 等字符串。color(可选):用于设置刻度标签的颜色。
Matplotlib 刻度标签示例
接下来,我们通过几个简单的例子来讲解一下 Matplotlib 是如何设置刻度标签的。
示例 1:Matplotlib 设置刻度标签(默认情况)
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 绘图
x = range(1, 16)
y = [36.0, 36.1, 36.6, 36.2, 36.4, 36.5, 36.0, 36.2, 36.4, 36.8, 36.7, 36.1, 36.6, 36.5, 36.7]
plt.plot(x, y, marker='o', markerfacecolor='white') # 节点为空心圆
# 定义标题
plt.title('15日体温变化')
plt.xlabel('日期')
plt.ylabel('体温')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
从上图可以看出来,x 轴的刻度是 2、4、6 这样的数字,但是我们想要 1、2、3、4 这样更加精确的刻度,此时就可以使用 xticks() 函数来实现了。
plt.xticks(ticks=range(1, 16))把上面这句代码加到 “定义标题” 的后面,再次运行之后,效果如下图所示。

示例 2:Matplotlib 定义 labels
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 绘图
x = range(1, 16)
y = [36.0, 36.1, 36.6, 36.2, 36.4, 36.5, 36.0, 36.2, 36.4, 36.8, 36.7, 36.1, 36.6, 36.5, 36.7]
plt.plot(x, y, marker='o', markerfacecolor='white') # 节点为空心圆
# 定义标题
plt.title('15日体温变化')
plt.xlabel('日期')
plt.ylabel('体温')
# 刻度标签
dates = [str(i) + '日' for i in range(1, 16)]
# 加上 rotation=45 让标签倾斜 45 度,防止重叠
plt.xticks(ticks=range(1, 16), labels=dates, rotation=45)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
dates = [str(i) + '日' for i in range(1, 16)] 这一句代码使用了 Python 列表推导式 的语法,主要用于快速生成这样一个列表:['1日', '2日', ... , '15日']。其中,列表推导式属于 Python 进阶技巧,小伙伴们可以自行搜索一下。
对于 plt.xticks(ticks, labels) 函数来说,如果想要使用第 2 个参数,那么 ticks 和 labels 这 2 个列表的元素个数必须相同,然后 labels 的元素会一一替换到 ticks 的刻度上去。
示例 3:Matplotlib 刻度定位器和格式器
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, StrMethodFormatter
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 绘图数据
x = range(1, 16)
y = [36.0, 36.1, 36.6, 36.2, 36.4, 36.5, 36.0, 36.2, 36.4, 36.8, 36.7, 36.1, 36.6, 36.5, 36.7]
plt.plot(x, y, marker='o', markerfacecolor='white') # 节点为空心圆
# 定义标题和标签
plt.title('15日体温变化')
plt.xlabel('日期')
plt.ylabel('体温(°C)')
# 获取当前 axes 对象
ax = plt.gca()
# 设置 x 轴刻度间隔为 2
ax.xaxis.set_major_locator(MultipleLocator(2))
# 设置 y 轴标签格式,保留一位小数
formatter = StrMethodFormatter('{x:.1f}°C')
ax.yaxis.set_major_formatter(formatter)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
Matplotlib 提供了更高级的方式来控制刻度的位置和标签格式,这就是使用 Locator 和 Formatter。
在上面例子中,我们首先使用 plt.gca() 获取了当前的 Axes 对象。然后,使用 MultipleLocator(2) 创建了一个刻度定位器,它会将 x 轴的主要刻度设置为每隔 2 个单位显示一个。接着,我们使用 StrMethodFormatter('{x:.1f}°C') 创建了一个格式器,它会将 y 轴的主要刻度标签格式化为保留一位小数的浮点数,并在末尾添加 “°C” 符号。
