Я хочу создать два сюжета, причем второй сюжет обычно составляет около 1/2 или меньше размера основного сюжета. Однако при попытке сделать это с одной строкой и двумя столбцами я получаю сообщение об ошибке
fig, axs=plt.subplots(1,2, figsize=(12,10), gridspec_kw = {'height_ratios': [2,1],
'width_ratios':[3,1]})
(ValueError: Expected the given number of height ratios to match the number of rows of the grid
).
Если я добавлю только один аргумент в список для height ratios
, то я получу два графика одинакового размера.
fig, axs=plt.subplots(1,2, figsize=(12,10), gridspec_kw = {'height_ratios': [3],
'width_ratios':[3,1]})
Этот график показан ниже. Как я могу сделать график справа вдвое меньше, чем слева, поместив его в правом нижнем углу (а не в правом верхнем)?
Хитрость здесь в том, что height_ratios
зависит от количества строк. Соотношение - это отношение между двумя вещами, поэтому вы не можете ввести соотношение между подграфиками высоты, если есть только одна строка (также известная как «высота» для подграфиков) - независимо от того, сколько столбцов есть. Однако вы можете обмануть plt.subplots
, используя fig.add_gridspec
, чтобы ввести больше строк и столбцов, но никогда не вызывать их. Вот как вы можете это сделать:
import matplotlib.pyplot as plt
if __name__ == "__main__":
fig = plt.figure(figsize=(12, 10))
gs = fig.add_gridspec(nrows=2, ncols=2, width_ratios=[3, 1])
fig.suptitle('An overall title')
# Add left subplot
# gs[top and bottom rows, first column (the 'left' subplot))]
ax_left = fig.add_subplot(gs[:, 0])
ax_left.set_xlabel("Left X label")
ax_left.set_ylabel("Left Y label")
# Add bottom right subplot - gs[bottom row, last column (the 'left' subplot)]
# We do not add the upper right subplot
ax_right_bottom = fig.add_subplot(gs[-1, -1])
ax_right_bottom.set_xlabel("Right Bottom X label")
ax_right_bottom.set_ylabel("Right Bottom Y label")
plt.tight_layout()
plt.show()
Если вы хотите сделать нижний правый подграфик меньше или больше по отношению к левому подграфику, теперь вы можете использовать height_ratios
, потому что теперь есть две строки, и вы можете реализовать соотношение.
Вы можете прочитать больше об этом в Расположение нескольких осей на рисунке — там полно полезных советов по работе с осями и сюжетными линиями. Ваше здоровье!