Я пытаюсь использовать constrained_layout вместе с вложенными GridSpecs для размещения вспомогательных участков и кнопок. Вот минимальный пример:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib.widgets import Button
def on_click(event):
print("hey")
fig = plt.figure(constrained_layout=True)
gs = gridspec.GridSpec(2, 1, height_ratios=[14, 1], figure=fig)
ax1 = fig.add_subplot(gs[0, 0])
ax1.text(0.5, 0.5, "ax1", va="center", ha="center")
ax2 = fig.add_subplot(gs[1, 0])
b = Button(ax2, 'hey')
b.on_clicked(on_click)
plt.show()
Пока все работает нормально, кнопка меняет цвет при наведении, и при нажатии выполняется обратный вызов, вот изображение кнопки, работающей нормально при создании с осями сверху. -уровень GridSpe c
![image](https://i.stack.imgur.com/daRiF.png)
Теперь, когда я пытаюсь вложить GridSpecs, то есть
ax2 = fig.add_subplot(gs[1, 0])
заменяется на
gs2 = gs[1, 0].subgridspec(1, 2)
ax2 = fig.add_subplot(gs2[0, 1])
макет по желанию,
![image](https://i.stack.imgur.com/XVVhu.png)
, но кнопка не работает (без изменения цвета при наведении, нет реакция на клик).
Пробовал plt.sca(ax2)
, без изменений. Интересно, когда вынимаю constrained_layout=True
, кнопка работает.
Это ошибка или что здесь происходит? Кто-нибудь может пролить свет на это?
Пожалуйста, не предлагайте использовать tight_layout()
и / или subplots_adjust()
. Выше приведен лишь минимальный пример, в реальной жизни у меня довольно сложная фигура со множеством сюжетов и несколькими кнопками. Чтобы избежать наложения этикеток et c. Мне нужно constrained_layout. Узкий_прием имеет ограничения (например, не учитывает все элементы должным образом, например, figure.suptitle ()). Ограниченный_лией вместе с вложенным GridSpe c казался хорошим решением, за исключением проблемы выше.
Спасибо за любую помощь!