如何使 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())
我使用 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())