Изменить метки цветовой шкалы с увеличения на уменьшение значения

Я хотел бы изменить метки для цветовой шкалы с увеличения до уменьшения значения. Когда я пытаюсь сделать это через vmin а также vmax Я получаю сообщение об ошибке:

minvalue должно быть меньше или равно maxvalue

Так, например, я бы хотел, чтобы цветовая полоса начиналась с 20 слева и доходила до 15 справа.

Пока это мой код для цветовой шкалы, но в этом примере значения идут от 15 до 20, и я бы хотел изменить этот порядок:

cmap1 = mpl.cm.YlOrBr_r

norm1 = mpl.colors.Normalize(15,20)

cb1   = mpl.colorbar.ColorbarBase(colorbar1, cmap=cmap1, norm=norm1, orientation='horizontal')

cb1.set_label('magnitude')

3 ответа

Решение

Цветовые полосы, показанные ниже, вероятно, не совсем такие, как у вас, так как они являются лишь примерами цветовых полос, которые служат доказательством концепции.

В следующем я предполагаю, что у вас есть цветная полоса, похожая на эту, с возрастающими значениями справа:

Оригинальная цветная панель

Способ 1: инвертирование оси X

Инвертирует всю ось X цветовой шкалы

Если вы хотите инвертировать ось X, то есть значения на оси X опускаются вправо, делая цветовую шкалу "зеркальной", вы можете использовать ColorbarBase "s ax атрибут:

cb1   = mpl.colorbar.ColorbarBase(colorbar1,
                                  cmap=cmap1,
                                  norm=norm1,
                                  orientation='horizontal')
cb1.ax.invert_xaxis()

Это дает вывод ниже.

Colorbar с перевернутой осью X

Также можно изменить количество меток, задав цветовые полосы. locator, Здесь MultipleLocator используется, хотя вы также можете использовать много других локаторов.

from matplotlib.ticker import MultipleLocator

cb1.locator = MultipleLocator(1) # Show ticks only for each multiple of 1
cb1.update_ticks()
cb1.ax.invert_xaxis() 

Colorbar с инвертированной осью X и MultipleLocator

Способ 2. Использование пользовательских ярлыков

Меняет порядок меток, сохраняя ориентацию цветовой шкалы

Если вы хотите, чтобы ориентация самой цветовой панели была как есть, и только поменять порядок, в котором отображаются метки, вы можете использовать set_ticks а также set_ticklabels методы. Это скорее подход "грубой силы", чем предыдущее решение.

cb1.set_ticks(np.arange(15, 21))
cb1.set_ticklabels(np.arange(20, 14, -1))

Это дает цветную полосу, показанную ниже. Обратите внимание, что цвета остаются неизменными, изменились только позиции галочек и метки.

Colorbar с пользовательскими ярлыками

у меня работает: variable_you_want.ax.invert_yaxis()

Альтернативное решение для создания цветной полосы в методе 2:

      cmap1 = cmap1.reversed()
cb1.ax.invert_yaxis()
Другие вопросы по тегам