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

问题描述

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

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,color='black',fontsize=16)

plt.show()

结果

enter image description here

颜色条内的文本不知何故未对齐。如何使颜色条内的文本居中对齐?脚本中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())

positioning text in colorbar