无法反转 matplotlib 子图中的 xticks

Rav*_*shi 4 python matplotlib

我使用 设计了一个子图matplotlib。我正在尝试扭转xticks剧情。请参阅示例代码-

import numpy as np
import matplotlib.pyplot as plt

# generate the data
n = 6
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)

# generate the ticks and reverse it
xticks = range(n)
xticks.reverse()

# plot the data
plt.figure()
ax = plt.subplot(111)
ax.bar(x, y)
print xticks # prints [5, 4, 3, 2, 1, 0]
ax.set_xticks(xticks)
plt.show()
Run Code Online (Sandbox Code Playgroud)

请参阅下面生成的图- 在此输入图像描述

请注意xticks。虽然ax.set_xticks(xticks)已经使用了,但是并xticks没有改变。我是否缺少一些重新渲染绘图的函数调用?

以下是系统信息——

matplotlib.__version__
'2.1.1'

matplotlib.__version__numpy__
'1.7.1'

python --version
Python 2.7.15rc1
Run Code Online (Sandbox Code Playgroud)

请注意,我只想反转刻度,不想反转轴。

She*_*ore 5

使用ax.set_xticks,您当前指定的刻度位置与列表的顺序无关。要么你通过[0, 1, 2, 3, 4, 5],要么你通过[5, 4, 3, 2, 1, 0]。在刻度中不会注意到差异。相反,您想要的是拥有您应该做的反向刻度标签set_xticklabels(xticks[::-1])。有两种方法可以做到这一点:

方式一

使用plt.xticks其中第一个参数指定刻度的位置,第二个参数指定相应的刻度标签。具体来说,xticks将提供刻度位置并xticks[::-1]用反向刻度标签标记您的图。

xticks = range(n)

# plot the data
plt.figure()
ax = plt.subplot(111)
ax.bar(x, y)

plt.xticks(xticks, xticks[::-1])
Run Code Online (Sandbox Code Playgroud)

方式2使用ax你需要的地方set_xticklabels得到你想要的东西

ax.set_xticks(xticks)
ax.set_xticklabels(xticks[::-1])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述