matplotlib: при использовании append_axes, как я могу указать оси, к которым я хочу добавить подпанель?

#python #matplotlib #divider #subplot

#python #matplotlib #разделитель #подзаголовок

Вопрос:

Я просматривал пример «scatter hist» в галерее Matplotlib.

На данный момент подпанели x / y находятся вверху и справа соответственно, т. Е.:

 divider = make_axes_locatable(axScatter)
axHistx = divider.append_axes("top", 1.2, pad=0.1, sharex=axScatter)
axHisty = divider.append_axes("right", 1.2, pad=0.1, sharey=axScatter)
  

Однако, если я изменю расположение подпанели на:

 divider = make_axes_locatable(axScatter)
axHistx = divider.append_axes("bottom", 1.2, pad=0.1, sharex=axScatter)
axHisty = divider.append_axes("right", 1.2, pad=0.1, sharey=axScatter)
  

т. Е. переместите подпанель x вниз, тогда append_axes добавит подзаголовок y справа от подзаголовка x, а не справа от точечной диаграммы. (Я бы загрузил изображение, но у меня пока недостаточно высокая репутация, чтобы публиковать изображения… grrr)!

Как я могу сообщить append_axes, что я хочу добавить подпанель y справа от «основных осей», содержащих точечную диаграмму? Я предполагаю, что мне нужно либо где-то снова указать объект axScatter (хотя я думал, что для этого divider = make_axes_locatable(axScatter) было ?!), либо я предполагаю, что divider настроил сетку на панели window, и мне нужно сообщить append_axes, какая ячейка содержит основные оси.

Спасибо,

Алекс

Комментарии:

1. Я знаю, что в приведенном выше случае это сработает, если я просто переключу вызовы divider.append_axes («top» …) и divider.append_axes («right» …), но как насчет того, когда я хочу поместить подзаголовки «снизу» и «слева», когда каким бы способом я ни вызывал append_axes , подзаголовки все еще прикреплены к неправильным осям ?!?

2. Я попробовал это, но не нашел решения. похоже на ошибку.

Ответ №1:

Порядок, в котором вы создаете axHisty и axHistx , кажется, имеет значение. Если вы измените порядок последних двух операторов, вы сможете получить желаемый эффект:

 divider = make_axes_locatable(axScatter)
axHisty = divider.append_axes("right", 1.2, pad=0.1,  sharey=axScatter)
axHistx = divider.append_axes("bottom", 1.2, pad=0.1, sharex=axScatter)
  

Это точно воняет, как жук.