Как
Использование cbar.ax.text
кажется обходным решением для некоторых других проблем.Рекомендуемый способ установить метку для цветовой панели - либо через сам вызов colorbar
, либо через cbar.set_label("label")
.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
arr = np.random.randint(0, 100, (2, 3))
fig, ax = plt.subplots(1, 1)
pax = ax.imshow(arr, vmin=0, vmax=100)
cbar_kws=dict(ticks=(0, 100))
cbar_txt='arb. units'
divider = make_axes_locatable(ax)
cax = divider.append_axes('right', size='5%', pad=0.05)
cbar = ax.figure.colorbar(pax, cax=cax, **dict(cbar_kws))
cbar.set_label(cbar_txt, labelpad=-12)
plt.tight_layout()
plt.show()
Результат одинаков в matplotlib 2.2.3 и 3.0.1:

Для расстояния до меткинезависимо от длины меток цветовой полосы, вы можете пометить левую сторону цветовой шкалы и еще больше сместить метку.
cbar.set_label(cbar_txt, labelpad=-36)
cbar.ax.yaxis.set_label_position("left")
Наконец, вы действительно можете использовать текст на осях, но расположить его на осях.координаты вместо координат данных,
cbar.ax.text(2, 0.5, cbar_txt, fontsize='medium', rotation=90,
va='center', ha='left', transform=cbar.ax.transAxes)
Почему
Относительно того, почему cbar.ax.text
работает по-разному в разных версиях: внутренние единицы цветовой шкалы изменились.Это не должно влиять на любое внешнее приложение, но облегчает применение различных локаторов к цветным полосам.На самом деле это стало более последовательным.Например, если диапазон цветовой шкалы составляет от 0 до 100, и вы помещаете текст в y = 0.5, он будет очень близок к 0.