如何使 matplotlib cloorbar 文本位置居中对齐?

How to make matplotlib cloorbar text position center-aligned?

我使用 Python3 在 Windows10 上可视化我的数据,如下所示。我尝试隐藏颜色条的刻度和刻度标签,并在颜色条内绘制文本。

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)

data = 20 + 100*np.random.rand(30, 30) 

#print(data)
plt.imshow(data)
cbar = plt.colorbar(ticks= [], pad=0.015, aspect=12)

x = 10

for index, label in enumerate([str(np.round(np.amin(data),1)), str(np.round(np.amax(data),1))]):
    
    y = np.amin(data) + 0.1*(np.amax(data) - np.amin(data)) + 0.7*index*(np.amax(data) - np.amin(data))
    
    if index == 0:
        cbar.ax.text(x, y, label, rotation=90, va='center', color='white', fontsize=16)
    else:
        cbar.ax.text(x, y, label, rotation=90, va='center', color='black', fontsize=16)

plt.show()

结果是

颜色条内的文本不知何故未对齐。如何使颜色条内的文本居中对齐?脚本中x的值有什么建议吗?

您可以使用 0.5 作为 x 位置和 yaxis transform(数据中的 y 轴,轴坐标中的 x 轴)。

for index, label in enumerate([str(np.round(np.amin(data), 1)), str(np.round(np.amax(data), 1))]):
    y = np.amin(data) + 0.1 * (np.amax(data) - np.amin(data)) + 0.7 * index * (np.amax(data) - np.amin(data))
    cbar.ax.text(0.5, y, label, rotation=90, va='center', ha='center',
                 color='white' if index == 0 else 'black', fontsize=16, transform=cbar.ax.get_yaxis_transform())