Matplotlib设置坐标轴的刻度以及刻度值

参考来源:https://zhuanlan.zhihu.com/p/32088843

https://www.delftstack.com/zh/howto/matplotlib/how-to-hide-axis-text-ticks-and-or-tick-labels-in-matplotlib/

在matplotlib中,刻度线叫做tick,刻度值叫做tick_label。

官方介绍图像

1

注意这幅图片中就包含了关于刻度线的一些信息。比方,不仅有主刻度线(Major tick),还有次刻度线(Minor tick)。并且我们看到刻度线都是朝着图的外侧。图中,上边的和右边的坐标轴(Spine)并没有刻度线。

那么所有我们看到的关于刻度线的属性,都是可以修改的,至于刻度值 (Tick label),在关于字符的问题中统一解决。在pylab中,有若干个函数用来修改刻度线的属性。

是否显示次刻度线

在pylab中内置了两个函数minorticks_on()和minorticks_off() 用来确定是否显示次刻度线。如下代码实现在左侧图中显示次刻度线,在右侧不显示次刻度线。在默认的情况下,不显示次刻度线。

1
2
3
4
5
6
from pylab import *
subplot(1,2,1)
minorticks_on()
subplot(1,2,2)
minorticks_off()
show()

2

刻度线的朝向

一般而言,我们希望刻度线朝外分布,这样避免影响图中的曲线和说明。但是有时候刻度线朝内分布,可以让图之间更加紧凑。在pylab中,利用tick_params控制刻度线的朝向,是朝图里,图外,还是都有。下面代码产生的图从左往右,分别显示朝里,朝外,两边都有的情况。

1
2
3
4
5
6
7
8
9
10
11
from pylab import *

subplot(1,3,1)
tick_params(direction='in')

subplot(1,3,2)
tick_params(direction='out')

subplot(1,3,3)
tick_params(direction='inout')
show()

3

选择修改主刻度线还是次刻度线

通过上面的例子可以看出,修改刻度线的主要函数就是tick_params。那么每次调用这个函数,是修改主刻度线、次刻度线,还是都改呢?这个由参数which控制。比方下面这段代码,分别让主刻度线朝里、次刻度线朝里、主次均朝里。最后一个图说明默认情况下,主次刻度线均朝外。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pylab import *
subplot(1,4,1)
minorticks_on()
tick_params(which='major',direction='in')

subplot(1,4,2)
minorticks_on()
tick_params(which='minor',direction='in')

subplot(1,4,3)
minorticks_on()
tick_params(which='both',direction='in')

subplot(1,4,4)
minorticks_on()
text(0.5,0.5,'default')
show()

4

修改刻度线的长度和宽度

如上图,如果觉得刻度线太短,太细,不太显眼,我们可以修改其长短、粗细。依然使用函数tick_params,通过参数widthlength控制。下面代码让左图的主刻度线一些,右图的次刻度线一些。

1
2
3
4
5
6
7
8
9
10
from pylab import *
subplot(1,2,1)
minorticks_on()
tick_params(which='major',width=4)

subplot(1,2,2)
minorticks_on()
tick_params(which='minor',length=10)

show()

5

在哪些轴上显示刻度线

我们来看怎么控制刻度线出现在哪些轴上。这里用参数left,right,bottom,top来控制,下面代码画出的图片,依次显示上下左右轴上的刻度线。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pylab import *
subplot(1,4,1)
tick_params(top='on',bottom='off',left='off',right='off')

subplot(1,4,2)
tick_params(top='off',bottom='on',left='off',right='off')

subplot(1,4,3)
tick_params(top='off',bottom='off',left='on',right='off')

subplot(1,4,4)
tick_params(top='off',bottom='off',left='off',right='on')

show()

6

在哪些轴上显示刻度值

注意上面的图,刻度线分别出现在我们控制的坐标轴上,但是刻度值在默认情况下还是出现在左下两个轴上。这里仅说明如何让刻度值出现在相应刻度线的位置。比方,我们仅让上面的轴显示刻度线,也仅在该轴上显示刻度值,利用labelbottom, labeltop, labelleft, labelright四个参数控制,代码和图如下所示。

1
2
3
4
5
6
from pylab import *

tick_params(top='on',bottom='off',left='off',right='off')
tick_params(labeltop='on',labelbottom='off',labelleft='off',labelright='off')

show()

7

设置x轴的刻度和显示

使用Matplotlib进行绘图时,当x轴的数据太多的时候,就需要设置x轴的刻度和显示文本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import matplotlib as mpl
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

#分别获取x轴和y轴的数据
x = [d[0] for d in data]
y = [d[1] for d in data]

#设置x轴的刻度以及显示文本
xticks = range(0, len(x), 10)
xlabels = [x[index] for index in xticks]
xticks.append(len(x))
xlabels.append(data[-1][0])


#设置坐标轴
ax.set_xticks(xticks)#xticks中的数据作为坐标轴系数
ax.set_xticklabels(xlabels, rotation=40)#将x轴的刻度值设置为xlabels,同时倾斜40度

#绘图并显示网格
plt.plot(y)
plt.grid()
plt.show()

其中,涉及到坐标轴的刻度以及显示文本的函数为

ax.set_xticks(xticks)#xticks中的数据作为坐标轴系数
ax.set_xticklabels(xlabels, rotation=40)#将x轴的刻度值

在 Matplotlib 中如何隐藏坐标轴文本刻度或刻度标签

  1. xaxis.set_visible(False)/yaxis.set_visible(False) 隐藏包括轴标签的坐标轴
  2. xaxis.set_ticks([])/yaxis.set_ticks([]) 在 Matplotlib 中隐藏坐标轴
  3. xaxis.set_ticklabels([])/yaxis.set_ticklabels([]) 在 Matplotlib 中隐藏轴标签/文本
  4. xticks(color=‘w’)/yticks(color=‘w’) 来隐藏 Matplotlib 中的坐标轴标签/文本

默认情况下,Matplotlib 中的图显示了两个轴的 ticksticklabels,如示例图所示。

它有不同的隐藏坐标轴文本的方法,例如 xaxis.set_visible(False)xaxis.set_ticks([])xaxis.set_ticklabels([])。如果将刻度线的颜色设置为白色,则仅当 Matplotlib 图形的前景色为白色时,它也可能使轴文本不可见。

8

xaxis.set_visible(False)/yaxis.set_visible(False) 隐藏包括轴标签的坐标轴

顾名思义,它使整个坐标轴不可见,包括轴刻度,轴刻度标签和轴标签。

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt

plt.plot([0, 10], [0, 10])
plt.xlabel("X Label")
plt.ylabel("Y Label")

ax = plt.gca()
ax.axes.xaxis.set_visible(False)
ax.axes.yaxis.set_visible(False)

plt.grid(True)
plt.show()

9

xaxis.set_ticks([])/yaxis.set_ticks([]) 在 Matplotlib 中隐藏坐标轴

x/yaxis.set_ticks([]) 设置刻度为空,并使坐标轴刻度及其标签不可见。但是坐标轴标签不受影响。

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt

plt.plot([0, 10], [0, 10])
plt.xlabel("X Label")
plt.ylabel("Y Label")

ax = plt.gca()
ax.axes.xaxis.set_ticks([])
ax.axes.yaxis.set_ticks([])

plt.grid(True)
plt.show()

10

xaxis.set_ticklabels([])/yaxis.set_ticklabels([]) 在 Matplotlib 中隐藏轴标签/文本

x/yaxis.set_ticklabels([]) 将刻度标签设置为空,从而使坐标轴文本(刻度标签)不可见,但刻度保持可见。

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt

plt.plot([0, 10], [0, 10])
plt.xlabel("X Label")
plt.ylabel("Y Label")

ax = plt.gca()

ax.axes.xaxis.set_ticklabels([])
ax.axes.yaxis.set_ticklabels([])

plt.grid(True)
plt.show()

11

xticks(color=‘w’)/yticks(color=‘w’) 来隐藏 Matplotlib 中的坐标轴标签/文本

这种方法不会使刻度线标签或刻度线不可见,而是将刻度线的颜色设置为白色,以便在绘图的背景为白色(也是默认颜色)的情况下,轴文本的确是不可见的。

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt

plt.plot([0, 10], [0, 10])
plt.xlabel("X Label")
plt.ylabel("Y Label")

plt.xticks(color='w')
plt.yticks(color='w')

plt.grid(True)
plt.show()

Matplotlib设置坐标轴的刻度以及刻度值
https://fulequn.github.io/2020/09/Article202009121/
作者
Fulequn
发布于
2020年9月12日
许可协议