Изменение размера/позиции подзаголовка matplotlib после создания осей
Можно ли установить размер/положение подзадачи matplotlib после создания осей? Я знаю, что могу:
import matplotlib.pyplot as plt
ax = plt.subplot(111)
ax.change_geometry(3,1,1)
чтобы поместить оси в верхнюю строку из трех. Но я хочу, чтобы оси охватывали первые две строки. Я пробовал это:
import matplotlib.gridspec as gridspec
ax = plt.subplot(111)
gs = gridspec.GridSpec(3,1)
ax.set_subplotspec(gs[0:2])
но оси все еще заполняют все окно.
Обновление для ясности
Я хочу изменить положение существующего экземпляра осей, а не устанавливать его при его создании. Это связано с тем, что размер осей будет изменяться каждый раз, когда я добавляю данные (вывод данных на карту с использованием картографии). Карта может оказаться высокой и узкой, или короткой и широкой (или что-то среднее). Таким образом, решение о компоновке сетки произойдет после функции построения графика.
Ответы
Ответ 1
Благодаря Молли, указывая мне в правильном направлении, у меня есть решение:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
ax = fig.add_subplot(111)
gs = gridspec.GridSpec(3,1)
ax.set_position(gs[0:2].get_position(fig))
ax.set_subplotspec(gs[0:2]) # only necessary if using tight_layout()
fig.add_subplot(gs[2])
fig.tight_layout() # not strictly part of the question
plt.show()
Ответ 2
Вы можете создать фигуру с одним подзадом, который охватывает две строки и один подзаговор, который охватывает одну строку, используя аргумент rowspan
для subplot2grid:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = plt.subplot2grid((3,1), (0,0), rowspan=2)
ax2 = plt.subplot2grid((3,1), (2,0))
plt.show()
![enter image description here]()
Если вы хотите изменить размер и позицию подзадачи после ее создания, вы можете использовать метод set_position.
ax1.set_position([0.1,0.1, 0.5, 0.5])
Бу вам это не понадобится, чтобы создать описанную вами цифру.
Ответ 3
Вы можете избежать ax.set_position()
, используя вместо этого fig.tight_layout()
, который пересчитывает новый gridspec:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
# create the first axes without knowing of further subplot creation
fig, ax = plt.subplots()
ax.plot(range(5), 'o-')
# now update the existing gridspec ...
gs = gridspec.GridSpec(3, 1)
ax.set_subplotspec(gs[0:2])
# ... and recalculate the positions
fig.tight_layout()
# add a new subplot
fig.add_subplot(gs[2])
fig.tight_layout()
plt.show()