Я прошу прощения за titlegore, но я не мог понять, как сформулировать это по-другому.Проблема лучше всего иллюстрируется рисунком ниже.Как вы можете видеть, я сделал рисунок, состоящий из 5 субплотов, используя matplotlibs gridspec, которые вписываются в 4 квадратных панели.Три пустые панели имеют свои собственные наборы координат х и требуют своей собственной метки.Однако данные с первых двух панелей имеют общую ось X, и (учитывая, что фактическая метка будет длинной), я бы предпочел иметь только одну метку и один набор меток для обеих, как показано здесь.
Но, как вы можете видеть, это оставляет довольно большой промежуток между двумя панелями, куда бы ушел ярлык.И это то, что я хотел бы решить;Я хотел бы растянуть две панели в равных количествах, чтобы заполнить это белое пространство.В то же время верхняя часть верхней панели и нижняя часть нижней панели должны по-прежнему совмещаться с участком справа, а нижняя часть обеих панелей не должна мешать расположению строки, которая находится ниже.Я изучил документацию по настройке панелей в документации , но не смог разобраться.
Кроме того, я хотел бы также иметь одну метку оси Y длядве панели, но я думаю, что могу выдумать это с fig.text()
.
Код, который генерирует вышеуказанный график:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import gridspec
xs = np.linspace(0,8*np.pi,101)
ys = np.cos(xs)
fig = plt.figure(figsize=(7.2,4.45*1.5))
gs1 = gridspec.GridSpec(4, 2, figure=fig)
#gs1.update(hspace=0.1)
ax1 = plt.subplot(gs1[0, 0])
ax1.plot(xs, ys)
#ax1.set_xlabel('X')
ax1.set_ylabel('Y1')
ax1.set_xticks([])
ax2 = plt.subplot(gs1[1, 0])
ax2.plot(xs, 0.5*ys)
ax2.set_xlabel('X')
ax2.set_ylabel('Y2')
ax2.set_ylim(-1,1)
gs2 = gridspec.GridSpec(4, 2)
ax3 = plt.subplot(gs2[0:2, 1])
ax3.set_xlabel('X3')
ax3.set_ylabel('Y3')
ax4 = plt.subplot(gs2[2:, 0])
ax4.set_xlabel('X4')
ax4.set_ylabel('Y4')
ax5 = plt.subplot(gs2[2:, 1])
ax5.set_xlabel('X5')
ax5.set_ylabel('Y5')
plt.tight_layout()