天天看点

matplotlib - 刻度定位器

今天补充个新的知识点:刻度定位器

我们之前有讲过

xticks

yticks

,那两个方法是设置坐标刻度,今天我们来讲刻度定位器

首先要明白一点,他们两个是不同的,那么这两个之间有什么区别呢?

设置坐标刻度:关于

xticks

yticks

这两个方法,我们最基本的会提供一个位置序列,还有一个标签序列,等真正绘图的时候,会根据我们提供的位置,相对应的将标签安置到其坐标上。

刻度定位器:刻度定位器,分主刻度定位器 和 次刻度定位器,那么我们来说一下什么是主刻度,什么是次刻度。

matplotlib - 刻度定位器

通过上图可以看到,我们的主刻度突出的线比较长,有标签标注,次刻度比较短,没有标签标注,其实,这就像我们用的学生直尺一般,分主次刻度,我们的刻度定位器的主次刻度也是如此

语法

#创建刻度定位器对象
刻度定位器对象 = plt.xxxLocator(...) 

#获取坐标轴
ax = plt.gca()

#设置x轴主次刻度定位器
ax.xaxis.set_major_locator(刻度定位器对象)
ax.xaxis.set_minor_locator(刻度定位器对象)

#设置y轴主次刻度定位器
ax.yaxis.set_major_locator(刻度定位器对象)
ax.yaxis.set_minor_locator(刻度定位器对象)
           

那么,现在我们知道了语法,准备开始实操代码~

在实操代码之前,我们首先来分析需求,因一会儿在创建代码的时候,我们会取多种定位器的方法进行演示,因此我们会创建矩阵子图,综合显示,创建一个变量存多种定位器,然后循环遍历展示

代码

#导入模块
from matplotlib import pyplot as plt
import numpy as np

#创建图形窗口
plt.figure('Locator')

#刻度定位器列表
locators=[
    #空定位器:不绘制刻度
    'plt.NullLocator()',
    #最大值定位器:最多绘制nbins个刻度,每两个刻度之间的间隔从steps列表中选择
    'plt.MaxNLocator(nbins=3,steps=[1,3,5,7,9])',
    #定点定位器:根据locs参数中的位置绘制刻度
    'plt.FixedLocator(locs=[0,2.5,5,7.5,10])',
    #自动定位器;缺省定位器:由绘图系统来自动选择刻度的绘制位置
    'plt.AutoLocator()',
    #等间距定位器,索引定位器:由offset来确定起始刻度,由base来确定相邻可得的间隔
    'plt.IndexLocator(offset=0.5,base=1.5)',
    #多点定位器,从0开始,按照参数指定的间隔(缺省1)绘制刻度,与IndexLocator方法类似
    'plt.MultipleLocator()',
    #线性定位器:线性等分成 numticks-1份,绘制numticks刻度
    'plt.LinearLocator(numticks=21)',
    #对数定位器,以base为底,用subs中的元素作为指数增量,绘制刻度
    'plt.LogLocator(base=2,subs=[1.0])'
]

#定义变量求列表的长度,刻度定位器数
n_locators = len(locators)

#遍历刻度定位器列表,通过enumerate返回枚举对象
for i,locator in enumerate(locators):
    #为每个刻度定位器创建一个子图
    plt.subplot(n_locators,1,i+1)
    #设置坐标范围
    plt.xlim(0,10)
    plt.ylim(-1,1)
    #关闭垂直坐标轴刻度
    plt.yticks(())
    #获取当前坐标轴
    ax = plt.gca()
    #隐藏除底轴以外其他的轴
    ax.spines['left'].set_color("none")
    ax.spines['top'].set_color("none")
    ax.spines["right"].set_color("none")
    #将底坐标轴调整到子图中心位置
    ax.spines["bottom"].set_position(("data",0))

    #设置水平坐标轴的主刻度定位器
    ax.xaxis.set_major_locator(eval(locator))

    #设置水平坐标轴的次刻度定位器为多点定位器,点间隔为0.1
    ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))

    #绘制一条与水平坐标重合的直线,无色透明,目的为显示出刻度来
    plt.plot(np.arange(11),np.zeros(11),c="none")

    #标记所用的刻度定位器类名
    plt.text(5,0.3,locator[4:],ha="center",size=12)

#紧凑布局
plt.tight_layout()

#保存图形
plt.savefig("刻度.png")
           

效果图

matplotlib - 刻度定位器

完。

继续阅读