Я не уверен, что моя формулировка верна, но я пытаюсь создать фигуру из двух участков, где два графика имеют разные пределы, но их размер таков, что физический масштаб (как, например, у -дистанция на сантиметр высоты фигуры) одинакова. Для пояснения, скажем, субплот 1 показывает данные от -3 до 3, а субплот 2 показывает данные от -1 до 1. Я хочу, чтобы они располагались ниже друг друга таким образом, чтобы высота субплота 2 (исключая тики, просто все внутри кадр) составляет ровно треть подпункта 1.
Моя попытка была следующей:
from matplotlib import gridspec
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0,2, 101)
y1 = 3*np.cos(x*np.pi)
y2 = np.cos(x*np.pi)
fig = plt.figure(figsize=(4, 6))
gs = gridspec.GridSpec(8, 1)
ax1 = plt.subplot(gs[0:6,0])
ax1.plot(x, y1, c='orange')
ax1.set_ylim(-3, 3)
ax1.set_xticks([], [])
ax2 = plt.subplot(gs[6:,0])
ax2.plot(x, y2, c='green')
ax2.set_ylim(-1,1)
ax2.set_xticks([0, 1, 2])
ax2.set_xticklabels([r'0', r'0.5', r'1'])
ax2.set_xlabel(r'$n_g$ (2e)')
plt.tight_layout()
fig.text(-0.025, 0.5, 'Frequency (GHz)', ha='center', va='center', rotation='vertical', size=18)
, что приводит к приведенному ниже рисунку, но, как вы можете видеть (хотя вам нужно присмотреться), диапазон от -1 до 1 во втором подзадаче сжимается (занимает меньше высоты), чем диапазон от -1 до 1 в подзаговоре 1 Я предполагаю, что это из-за пробела между двумя участками.
Обратите внимание, что я использую gridspec, потому что планирую добавить еще один столбец вспомогательных участков с интересными пропорциями и собственными метками и ограничениями. Я не знал, как добавить глобальный ylabel более элегантным способом, если кому-то интересно.