Matplotlib изменить высоту цветовой шкалы в пределах собственных осей - PullRequest
0 голосов
/ 22 ноября 2018

В настоящее время я пытаюсь создать стек графиков, из которых мои первые два имеют цветные полосы.Чтобы сделать это красиво, я использую GridSpec для определения двух столбцов, второй из которых значительно тоньше и специально для цветных полос (или других внеплановых вещей, таких как легенды).

grids  = gs.GridSpec(5, 2, width_ratios=[1, 0.01])
ax1    = fig.add_subplot(grids[0, 0])
cax1   = fig.add_subplot(grids[0, 1])

Проблема в том, чточто для этих двух верхних графиков метки моей цветовой шкалы слегка перекрываются из-за того, что у меня нулевое горизонтальное пространство между моими графиками.

Я знаю, что есть способы контроля высоты цветовой шкалы., но они, кажется, полагаются на то, что цветовая полоса создает свои собственные оси, занимая пространство от родительских осей.Мне было интересно, есть ли какой-либо способ контролировать, сколько места (или, в частности, высота) занимает цветовая панель, когда вы используете cax kwarg

fig.colorbar(im1, cax=cax1, extend='max')

, или она по умолчанию (неизменно) занимает весьвысота заданных ей осей.

Спасибо!

РЕДАКТИРОВАТЬ: Вот изображение проблемы, с которой я борюсь.

enter image description here

Если бы я мог сделать второе немного короче или немного сместить верхнее, то это не было бы проблемой.К сожалению, так как я использовал GridSpec (что было удивительно в противном случае), я ограничен пределами осей.

1 Ответ

0 голосов
/ 22 ноября 2018

Я не думаю, что есть какой-либо способ попросить цветовую панель не заполнить все cax.Тем не менее, довольно просто уменьшить размер cax до (или после) построения цветовой шкалы.

Я написал эту небольшую функцию:

def shrink_cbar(ax, shrink=0.9):
    b = ax.get_position()
    new_h = b.height*shrink
    pad = (b.height-new_h)/2.
    new_y0 = b.y0 + pad
    new_y1 = b.y1 - pad
    b.y0 = new_y0
    b.y1 = new_y1
    ax.set_position(b)

, которую можно использоватьвот так:

fig = plt.figure()
grids  = gs.GridSpec(2, 2, width_ratios=[1, 0.01])
ax1    = fig.add_subplot(grids[0, 0])
cax1   = fig.add_subplot(grids[0, 1])

ax2    = fig.add_subplot(grids[1, 0])
cax2   = fig.add_subplot(grids[1, 1])
shrink_cbar(cax2, 0.75)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...