为什么set_xticks不设置刻度标签?

col*_*ang 45 python matplotlib

import pylab as plt

x = range(1, 7)
y = (220, 300, 300, 290, 320, 315)

def test(axes):
    axes.bar(x,y)
    axes.set_xticks(x, [i+100 for i in x])

a = plt.subplot(1,2,1)
test(a)
b = plt.subplot(1,2,2)
test(b)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我期待xlabs为101, 102 ... 然而,如果我切换到使用plt.xticks(x, [i+100 for i in x])并明确重写函数,它的工作原理.

Hoo*_*ked 89

.set_xticks()在轴上将设置位置set_xticklabels()并将设置显示的文本.

def test(axes):
    axes.bar(x,y)
    axes.set_xticks(x)
    axes.set_xticklabels([i+100 for i in x])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • plt.xticks(position, label) 起作用,而轴上的 set_xticks 像子图一样不起作用,并且需要另一个调用 set_xticklabels。我在 pyplot 上调用了错误的 api (3认同)
  • 非常清楚!这个答案在几年后仍然有用,谢谢! (2认同)
  • @RichardRast 它似乎仍然很奇怪。 (2认同)

gro*_*ist 7

如果您不想为每个(甚至任何)刻度线添加标签,另一个可能有用的函数是axes.tick_params.

def test(axes):
    axes.tick_params(axis='x',which='minor',direction='out',bottom=True,length=5)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


tdy*_*tdy 5

matplotlib 3.5.0 中的新增功能

ax.set_xticks现在接受一个labels参数来同时设置刻度和标签:

fig, ax = plt.subplots()
ax.bar(x, y)
ax.set_xticks(x, labels=[i + 100 for i in x])
#                ^^^^^^
Run Code Online (Sandbox Code Playgroud)

刻度标签随标签参数更改

由于更改标签通常需要更改刻度,因此labels为了方便起见,该参数已添加到所有相关的刻度函数中:

  • ax.xaxis.set_ticks(..., labels=...)
  • ax.yaxis.set_ticks(..., labels=...)
  • ax.set_xticks(..., labels=...)
  • ax.set_yticks(..., labels=...)