用于将x和y标签放置在matplotlib.pyplot中刻度位置中间的python代码

l5tcr1uw  于 2023-01-13  发布在  Python
关注(0)|答案(1)|浏览(134)

我正在尝试通过将网格线放置到一些特定位置来创建热图,我已经完成了这一操作。假设,我尝试在长度为640,640的矩阵中的位置358和589制作网格线。之后,我想将标签从358更改为定义值999,并将589更改为指定值1023。然而,无法更改两条网格线中心位置的x和y标签。例如,我尝试了以下方法:

data = np.random.rand(640, 640)
fig, ax = plt.subplots()
im = ax.imshow(data,cmap='coolwarm')
ax.set_xticks([358,589])
ax.set_yticks([358,589])
ax.set_xticklabels([999,1023])
ax.set_yticklabels([999,1023])
ax.grid(which='major',color='black',linestyle='--',linewidth=1,alpha=0.5)
plt.show()

创建如下图像:Heatmap with customized labelling
但是我想把标签放在两条网格线的中间而不是网格线的位置。怎么做呢?

brccelvz

brccelvz1#

默认情况下,刻度标签和网格线都由主刻度决定。要更改此设置,可以使用次刻度来定位刻度标签的网格线和主刻度:

from matplotlib import pyplot as plt
import numpy as np

data = np.random.randn(640, 640).cumsum(axis=0).cumsum(axis=1)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='coolwarm')
positions = np.array([358, 589])
ax.set_xticks(positions, minor=True)
ax.set_yticks(positions, minor=True)
borders = np.append(0, positions)
mids = (borders[:-1] + borders[1:]) / 2
ax.set_xticks(mids, [999, 1023], minor=False)
ax.set_yticks(mids, [999, 1023], minor=False)
ax.grid(which='minor', color='black', linestyle='--', linewidth=1, alpha=0.9)
plt.show()

相关问题