Python 使用matplotlib,如何将XLABEL移动到顶部,并使所有标签在网格线之间居中?

Python 使用matplotlib,如何将XLABEL移动到顶部,并使所有标签在网格线之间居中?,python,matplotlib,label,Python,Matplotlib,Label,我正在尝试创建一个10x10的网格,其中每个单元格不是黑色就是白色。我让它以我想要的方式工作,但是我想将x标签移动到网格的顶部,并且我希望所有标签都在未与它们对齐的网格线之间居中。我该怎么办 import numpy as np import matplotlib.pyplot as plt # data = random.random((10, 10)) face = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1,

我正在尝试创建一个10x10的网格,其中每个单元格不是黑色就是白色。我让它以我想要的方式工作,但是我想将x标签移动到网格的顶部,并且我希望所有标签都在未与它们对齐的网格线之间居中。我该怎么办

import numpy as np
import matplotlib.pyplot as plt

# data = random.random((10, 10))
face = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 0, 0, 1, 1, 1, 0, 0, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 0, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 0, 0, 1, 1, 1, 1],
        [1, 0, 1, 1, 1, 1, 1, 1, 0, 1],
        [1, 1, 0, 1, 1, 1, 1, 0, 1, 1],
        [1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

img = plt.imshow(face, interpolation='nearest')

img.set_cmap('hot')
plt.axis('on')
plt.xticks(np.arange(0, 11, 1) - 0.5, np.arange(0, 11, 1))
plt.yticks(np.arange(0, 11, 1) - 0.5, np.arange(0, 11, 1))
plt.grid(True, linestyle='dotted', linewidth=1, color='k')
plt.plot()
plt.savefig("test.png", bbox_inches='tight')
plt.show()

如果我理解正确,请使用
matshow
而不是
imshow
。此外,使用
minor
记号标记:

fig, ax = plt.subplots()
img = ax.matshow(face, interpolation='nearest', cmap='hot')

ax.set_xticks(np.arange(10), minor=True)
ax.set_xticklabels(np.arange(10), minor=True)

ax.set_yticks(np.arange(10), minor=True)
ax.set_yticklabels(np.arange(10), minor=True)

plt.xticks(np.arange(11)-0.5,[])
plt.yticks(np.arange(11)-0.5,[])

plt.grid(True, linestyle='dotted', linewidth=1, color='k')
plt.plot()
# plt.savefig("test.png", bbox_inches='tight')
plt.show()
输出: