Как соединить окна подзаголовков?

Предположим, что сетка подзаголовка 3x2; на верхнем 2x2 я пытаюсь сделать четыре разных графика, но нижний 1x2 должен быть "соединенным" окном, как показано ниже. Две идеи: (1) построить как одну фигуру, чтобы включить fig.savefig(); (2) сохранить ширину и высоту, т.е. «совместный» график должен охватывать два окна подзаголовка (не обязательно в 2 раза больше ширины любого из них) и иметь одинаковую высоту. MATLAB может это сделать, не зная matplotlib.


Изображение цели:


Код изображения:

import matplotlib.pyplot as plt
import numpy as np

X = np.random.randn(6, 100, 100)
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True, dpi=72)  # 2x2 for demo

for x, ax in zip(X[:4], axes.flat[:4]):
    ax.imshow(x)
plt.subplots_adjust(left=0, right=.6, bottom=0, top=1, wspace=.01, hspace=.01)
plt.show()

plt.imshow(X[-2:].reshape(100, 200))
plt.gcf().set_size_inches(9.15, 5.5)
plt.show()

person OverLordGoldDragon    schedule 25.04.2020    source источник
comment
В официальной документации matplotlib есть пример. Он использует gridspec, чтобы установить соотношение между подзаголовками. Существует также более пример с вовлечением.   -  person JohanC    schedule 26.04.2020
comment
@JohanC Отлично, спасибо.   -  person OverLordGoldDragon    schedule 26.04.2020


Ответы (1)


Взяв пример документов (спасибо @JohanC), это можно сделать путем замены интересующих осей на "ось сустава", указанную _ 1_:

import matplotlib.pyplot as plt
import numpy as np

X = np.random.randn(6, 100, 100)
fig, axes = plt.subplots(3, 2, sharex=True, sharey=True, figsize=(9, 9))

for x, ax in zip(X, axes.flat[:-2]):
    ax.imshow(x)

gs = axes[0, 0].get_gridspec()
for ax in axes[-1, :]:
    ax.remove()
axbig = fig.add_subplot(gs[-1, :])
axbig.imshow(X[-2:].reshape(100, 200))

fig.subplots_adjust(left=0, right=1, bottom=0, top=1, wspace=-.5, hspace=.02)

person OverLordGoldDragon    schedule 25.04.2020