Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.transforms import blended_transform_factory
imgs = [
np.random.randn(200, 200),
np.random.randn(50, 70),
np.random.randn(100, 100),
]
figsize = [4, 6]
ylabel = "Long label for radius (cm)"
fig = plt.figure(figsize=figsize, layout="constrained")
gs = fig.add_gridspec(3, 1, height_ratios=[2, 1, 1])
axes = [fig.add_subplot(gs[i]) for i in range(3)]
for i in range(len(axes)):
ax = axes[i]
ax.imshow(imgs[i], aspect="auto")
ax.set_xlabel("time (min)")
# from here on come different trials
for ax in axes:
ax.set_ylabel(ylabel)
fig.align_ylabels(axes) # needed because of different y-ticks (100 vs 50)
Код: Выделить всё
axes[0].set_ylabel(ylabel)
axes[1].set_ylabel(ylabel, loc="bottom")
fig.align_ylabels(axes)
< /p>
Затем я попробовал < /p>
Код: Выделить всё
axes[0].set_ylabel(ylabel)
axes[1].set_ylabel(ylabel, loc="bottom", va="center")
fig.align_ylabels(axes)
< /p>
Лучшая попытка на данный момент была < /p>
Код: Выделить всё
axes[0].set_ylabel(ylabel)
axes[1].set_ylabel(ylabel)
ax = axes[1]
new_trafo = blended_transform_factory(
x_transform=ax.yaxis.label.get_transform(),
y_transform=ax.transAxes,
)
axes[1].set_ylabel(ylabel, y=0.0, va="center")
fig.align_ylabels(axes)
< /code>
С этим результатом (kicish y выравнивание, которое можно решить, но неправильно x выравнивание). < /p>
Ни один из подходов не работал должным образом. Но должен быть способ сказать Matplotlib, что нижняя илабеля должна иметь точно такое же положение x (на рисунках пикселей), что и верхнее даже после пересчитывания положений Ylabel для Layout = "Code> и Fig.align_ylabels (оси)
Код: Выделить всё
axes[0].set_ylabel(ylabel)
for ax in axes[1:]:
ax.set_ylabel("Long label\nfor radius (cm)")
fig.align_ylabels(axes)
Подробнее здесь: https://stackoverflow.com/questions/793 ... n-subplots