Добавление цветовой шкалы вне изображения без его сжатия - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь построить 3x3 субплота, первая строка с использованием imshow, а вторая и третья - регулярные графики.Все графики 3x3 имеют одну и ту же ось X, поэтому очень важно, чтобы они были идеально выровнены (я не использовал sharey = true, потому что я хотел использовать y-метки).Я смог поместить легенды графиков за пределы рисунка справа (легенда - это та же самая легенда для всех 3 фигур в одном ряду) с помощью:

ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

Но я не смог найти, какпоместить цветную полосу первого ряда над ними, не уменьшая третий график в первом ряду.Я пытался использовать "make_axes_locatable":

from mpl_toolkits.axes_grid1 import make_axes_locatable
divider = make_axes_locatable(powers_ax)
cax = divider.append_axes("right", size="5%", pad=1)
plt.colorbar(im, cax=cax)

Или "inset_axes":

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
axins = inset_axes(powers_ax, width="10%", height="100%", loc=5,
                   bbox_to_anchor=(0.5, 0, 1, 1), bbox_transform=powers_ax.transAxes)
plt.colorbar(im, cax=axins)

Или даже этот трюк:

fig.colorbar(im2, ax=ax[0, :].ravel().tolist(), location='right', shrink=0.6)

Но ничего не дало мнерезультат я наблюдал.Любые идеи?

* РЕДАКТИРОВАТЬ *

Как и предположил @ImportanceOfBeingErnest, решением было настроить первый параметр в bbox_to_anchor (в данном случае от 0,5 до 1,15):

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
axins = inset_axes(powers_ax, width="5%", height="100%", loc=5,
                   bbox_to_anchor=(1.15, 0, 1, 1), bbox_transform=powers_ax.transAxes)
plt.colorbar(im2, cax=axins)

enter image description here

...