Matplotlib坐标轴设置方法大全(附带实例)
在组成图表的所有元素中,坐标轴是最重要的元素之一,它为绘制到图表中的数据提供了分类和数值信息。每个坐标系都有两个或更多个坐标轴,本节只讨论两个坐标轴的情况。
创建图表时,Matplotlib 会为每个坐标轴指定默认的刻度范围,并添加刻度线和刻度标签。根据实际需求,可以随时更改这些设置。此外,为了使坐标轴的含义更清晰,通常需要为坐标轴添加标题。
分析下面的代码:

图 1 没有标题的坐标轴
本例使用 numpy 库中的 randint() 函数自动生成 10~100 的随机整数,所以需要在代码的开头导入该库。np.random.seed(10) 这条语句是为了每次运行代码时,都能生成完全相同的随机数。可以将括号中的 10 替换为任意数字,使用同一个数字可以获得相同的随机数。
下面的代码是使用 Axes 对象的 set_xlabel() 方法,将 x 轴的标题设置为“月份”,使用 set_ylabel() 方法将 y 轴的标题设置为“数量”:

图 2 为坐标轴添加标题
使用 pyplot 模块中的 xlabel() 和 ylabel() 函数也可以实现相同的功能:
下面的代码将 x 轴标题显示在图表的顶部,将 y 轴标题显示在图表的右侧:

图 3 更改坐标轴标题的位置
将 set_label_position() 方法的参数分别设置为 bottom 和 left,可以将 x 轴和 y 轴的标题显示到图表的底部和左侧。
为了使数据在图表上呈现更好的效果,有时可能需要手动更改坐标轴的取值范围。如需更改坐标轴的取值范围,可以使用 pyplot 模块中的 xlim() 和 ylim() 函数,或使用 Axes 对象的 set_xlim() 和 set_ylim() 方法。
下面的代码是使用 xlim() 函数将 x 轴的取值范围设置为 1~6,使用 ylim() 函数将 y 轴的取值范围设置为 10~100:

图 4 设置坐标轴的取值范围
下面的代码实现相同的功能,但是使用的是 Axes 对象的 set_xlim() 和 set_ylim() 方法:
如果希望 x 轴的刻度按照 1、2、3、4、5 等连续数字的方式显示,则需要更改坐标轴的刻度。使用 pyplot 模块中的 xticks() 函数和 yticks() 函数,或 Axis 对象的 set_ticks() 方法,可以更改坐标轴的刻度。
下面的代码是使用 xticks() 函数和 yticks() 函数分别将 x 轴和 y 轴的刻度细化显示:

图 5 设置坐标轴的刻度
使用 Axis 对象的 set_ticks() 方法可以实现相同的功能,但是需要先使用 Axes 对象的 xaxis 属性和 yaxis 属性分别引用 x 轴和 y 轴,然后再使用 set_ticks() 方法设置 x 轴和 y 轴的刻度。
无论是 xticks() 函数和 yticks() 函数,还是 set_ticks() 方法,上面的示例都只为它们指定了第一个参数。它们还有一个关键字参数 labels,用于设置刻度的标签,即显示在刻度旁边的数字或文字。
下面的代码将 x 轴的刻度标签设置为 1 月、2 月、3 月……12 月的形式:

图 6 设置坐标轴的刻度标签
如果想要减少代码的行数,可以使用列表推导式代替 for 循环语句,修改后的代码如下:
创建图表时,Matplotlib 会为每个坐标轴指定默认的刻度范围,并添加刻度线和刻度标签。根据实际需求,可以随时更改这些设置。此外,为了使坐标轴的含义更清晰,通常需要为坐标轴添加标题。
Matplotlib设置坐标轴标题
为了使坐标轴的含义更清晰,通常需要为坐标轴添加标题。使用 pyplot 模块中的 xlabel() 和 ylabel() 函数,或使用 Axes 对象的 set_xlabel() 和 set_ylabel() 方法,可以为 x 轴和 y 轴添加标题。分析下面的代码:
import matplotlib.pyplot as plt import numpy as np x = range(1, 13) np.random.seed(10) y = np.random.randint(10, 100, 12) fig, ax = plt.subplots() ax.plot(x, y) plt.show()将创建下图所示的图表,由于 x 轴和 y 轴都没有标题,所以不知道两个坐标轴的数据表示的是什么。

图 1 没有标题的坐标轴
本例使用 numpy 库中的 randint() 函数自动生成 10~100 的随机整数,所以需要在代码的开头导入该库。np.random.seed(10) 这条语句是为了每次运行代码时,都能生成完全相同的随机数。可以将括号中的 10 替换为任意数字,使用同一个数字可以获得相同的随机数。
下面的代码是使用 Axes 对象的 set_xlabel() 方法,将 x 轴的标题设置为“月份”,使用 set_ylabel() 方法将 y 轴的标题设置为“数量”:
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np mpl.rcParams['font.sans-serif'] = 'SimSun' # 设置字体为SimSun x = range(1, 13) np.random.seed(10) y = np.random.randint(10, 100, 12) fig, ax = plt.subplots() ax.plot(x, y) ax.set_xlabel('月份') # 设置x轴标签为“月份” ax.set_ylabel('数量') # 设置y轴标签为“数量” plt.show()此时坐标轴的含义变得非常明确,如下图所示:

图 2 为坐标轴添加标题
使用 pyplot 模块中的 xlabel() 和 ylabel() 函数也可以实现相同的功能:
plt.xlabel('月份') plt.ylabel('数量')x 轴和 y 轴的标题默认显示在图表的底部和左侧。使用 Axis 对象的 set_label_position() 方法可以更改标题的位置。为了获得对 x 轴和 y 轴的引用,需要使用 Axes 对象的 xaxis 和 yaxis 属性。
下面的代码将 x 轴标题显示在图表的顶部,将 y 轴标题显示在图表的右侧:
ax.xaxis.set_label_position('top') ax.yaxis.set_label_position('right')如下图所示:

图 3 更改坐标轴标题的位置
将 set_label_position() 方法的参数分别设置为 bottom 和 left,可以将 x 轴和 y 轴的标题显示到图表的底部和左侧。
Matplotlib设置坐标轴取值范围
在 Matplotlib 中,创建坐标系的 x 轴和 y 轴的取值范围默认为 0~1。创建图表时,Matplotlib 会根据数据中的最小值和最大值,自动调整坐标轴的取值范围。为了使数据在图表上呈现更好的效果,有时可能需要手动更改坐标轴的取值范围。如需更改坐标轴的取值范围,可以使用 pyplot 模块中的 xlim() 和 ylim() 函数,或使用 Axes 对象的 set_xlim() 和 set_ylim() 方法。
下面的代码是使用 xlim() 函数将 x 轴的取值范围设置为 1~6,使用 ylim() 函数将 y 轴的取值范围设置为 10~100:
import matplotlib.pyplot as plt fig, ax = plt.subplots() plt.xlim(1, 6) plt.ylim(10, 100) plt.show()如下图所示:

图 4 设置坐标轴的取值范围
下面的代码实现相同的功能,但是使用的是 Axes 对象的 set_xlim() 和 set_ylim() 方法:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.set_xlim(1, 6) ax.set_ylim(10, 100) plt.show()
Matplotlib设置坐标轴刻度和标签
在 Matplotlib 中,有时创建的图表中的坐标轴刻度不是连续的,比如 x 轴的刻度是 2、4、6、8、10 和 12,y轴也可能是类似的情况。如果希望 x 轴的刻度按照 1、2、3、4、5 等连续数字的方式显示,则需要更改坐标轴的刻度。使用 pyplot 模块中的 xticks() 函数和 yticks() 函数,或 Axis 对象的 set_ticks() 方法,可以更改坐标轴的刻度。
下面的代码是使用 xticks() 函数和 yticks() 函数分别将 x 轴和 y 轴的刻度细化显示:
import matplotlib.pyplot as plt import numpy as np x = range(1, 13) np.random.seed(10) y = np.random.randint(10, 100, 12) fig, ax = plt.subplots() ax.plot(x, y) plt.xticks(x) # 设置x轴的刻度标签为x的值 plt.yticks(range(10, 101, 10)) # 设置y轴的刻度标签为10到100,步长为10的值 plt.show()如下图所示:

图 5 设置坐标轴的刻度
使用 Axis 对象的 set_ticks() 方法可以实现相同的功能,但是需要先使用 Axes 对象的 xaxis 属性和 yaxis 属性分别引用 x 轴和 y 轴,然后再使用 set_ticks() 方法设置 x 轴和 y 轴的刻度。
ax.xaxis.set_ticks(x) ax.yaxis.set_ticks(range(10, 101, 10))
无论是 xticks() 函数和 yticks() 函数,还是 set_ticks() 方法,上面的示例都只为它们指定了第一个参数。它们还有一个关键字参数 labels,用于设置刻度的标签,即显示在刻度旁边的数字或文字。
下面的代码将 x 轴的刻度标签设置为 1 月、2 月、3 月……12 月的形式:
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np mpl.rcParams['font.sans-serif'] = 'SimSun' # 设置字体为SimSun,以支持中文显示 x = range(1, 13) date = [] for d in x: date.append(str(d) + '月') np.random.seed(10) y = np.random.randint(10, 100, 12) fig, ax = plt.subplots() ax.plot(x, y) ax.xaxis.set_ticks(x, date) # 设置x轴的刻度标签为日期 ax.yaxis.set_ticks(range(10, 101, 10)) # 设置y轴的刻度标签为10到100,步长为10的值 plt.show()如下图所示:

图 6 设置坐标轴的刻度标签
如果想要减少代码的行数,可以使用列表推导式代替 for 循环语句,修改后的代码如下:
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np mpl.rcParams['font.sans-serif'] = 'SimSun' # 设置字体为SimSun以支持中文显示 x = range(1, 13) date = [str(d) + '月' for d in x] # 使用列表推导式生成日期标签 np.random.seed(10) # 设置随机数种子以确保结果可复现 y = np.random.randint(10, 100, 12) # 生成12个10到100之间的随机整数 fig, ax = plt.subplots() # 创建图形和轴 ax.plot(x, y) # 绘制折线图 ax.xaxis.set_ticks(x, date) # 设置x轴的刻度标签为日期 ax.yaxis.set_ticks(range(10, 101, 10)) # 设置y轴的刻度标签为10到100,步长为10 plt.show() # 显示图形