Python Matplotlib在imshow plot中居中/对齐记号

Python Matplotlib在imshow plot中居中/对齐记号,python,matplotlib,imshow,Python,Matplotlib,Imshow,我一直在尝试将我的imshow的x和y刻度居中,但没有成功 所需的yticks应该是:[1002003004005006007008009001000]和xticks:[5,10,15,20,25,30,35,40,45,50,55]但是对齐/居中。例如,线1应该有100的值正好在行空间的中间(黄色框/像素的中间)。 此处,值5根本不出现在x轴中 我还尝试了以下方法,x轴(如果可以的话)但y轴不可以 plt.figure(dpi=130) X = np.random.rand(10,11) p

我一直在尝试将我的
imshow
的x和y刻度居中,但没有成功

所需的
yticks
应该是:
[1002003004005006007008009001000]
xticks
[5,10,15,20,25,30,35,40,45,50,55]
但是对齐/居中。例如,线1应该有100的值正好在行空间的中间(黄色框/像素的中间)。 此处,值
5
根本不出现在
x轴中

我还尝试了以下方法,x轴(如果可以的话)但y轴不可以

plt.figure(dpi=130)
X = np.random.rand(10,11)
plt.imshow(X, cmap = 'jet', interpolation=None, extent=[2.5,57.5,1000,100], aspect='auto')
ax = plt.gca()
xticks = cluster_space
yticks = space_segment
ax.set_xticks(xticks)
ax.set_yticks(yticks)


通常,要使像素居中,需要将范围设置为从最低像素坐标减去像素宽度的一半到最高像素坐标加上像素宽度的一半

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

X = np.random.rand(10,11)
plt.figure()

centers = [5,55,1000,100]
dx, = np.diff(centers[:2])/(X.shape[1]-1)
dy, = -np.diff(centers[2:])/(X.shape[0]-1)
extent = [centers[0]-dx/2, centers[1]+dx/2, centers[2]+dy/2, centers[3]-dy/2]
plt.imshow(X, cmap = 'jet', interpolation=None, extent=extent, aspect='auto')

plt.xticks(np.arange(centers[0], centers[1]+dx, dx))
plt.yticks(np.arange(centers[3], centers[2]+dy, dy))
plt.show()

所以您希望轴的范围为0到60,以及50到1050,对吗?你试过那些值了吗?没有。我希望轴在我的操作中提到的范围内。但是我需要记号(值)在每一行中完全居中。以100为例。我需要100个值出现在黄色框/像素的中间,这是矛盾的。但是检查我的答案,如果这不是你想要的,你可以用它来解释它应该是什么样子。这正是我需要的。
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

X = np.random.rand(10,11)
plt.figure()

centers = [5,55,1000,100]
dx, = np.diff(centers[:2])/(X.shape[1]-1)
dy, = -np.diff(centers[2:])/(X.shape[0]-1)
extent = [centers[0]-dx/2, centers[1]+dx/2, centers[2]+dy/2, centers[3]-dy/2]
plt.imshow(X, cmap = 'jet', interpolation=None, extent=extent, aspect='auto')

plt.xticks(np.arange(centers[0], centers[1]+dx, dx))
plt.yticks(np.arange(centers[3], centers[2]+dy, dy))
plt.show()