Как изменить размер подфигуры при использовании ImageGrid из Matplotlib

Используя Python и Matplotlib, я пытаюсь создать фигуру, состоящую из двух подфигур, каждая из которых содержит группу графиков с общей цветовой шкалой. У меня почти все работает. Единственная часть, которую я не могу понять, это как сделать, чтобы верхний и нижний сюжеты имели одинаковую ширину - т.е. сетка 4x2 + цветная полоса должна иметь такую ​​же ширину, как сетка 2x1 + цветная полоса. Предполагается, что нижнее левое изображение не совпадает с формой других графиков.

Вот код, который у меня есть:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid, ImageGrid
from numpy.random import rand

fig = plt.figure(1)

grid1 = ImageGrid(fig, 211,
                nrows_ncols = (2, 4),
                axes_pad = 0.07,
                share_all=True,
                label_mode = "L",
                cbar_location = "right",
                cbar_mode="single",
                cbar_size="7%",
                cbar_pad="7%",
                aspect = True
                )

for n in range(8):
    im = grid1[n].imshow(rand(10,10),interpolation="nearest")

grid1.axes_all

cb1 = grid1.cbar_axes[0].colorbar(im)
cb1.set_label_text('subfig 1')

grid2 = ImageGrid(fig, 212,
                nrows_ncols = (1, 2),
                axes_pad = 0.1,
                label_mode = "L",
                share_all = False,
                cbar_location="right",
                cbar_mode="single",
                cbar_size="7%",
                cbar_pad="7%",
                aspect = True
                )

im = grid2[0].imshow(rand(10,15),interpolation="nearest")
im = grid2[1].imshow(rand(10,10),interpolation="nearest")

cb2 = grid2.cbar_axes[0].colorbar(im)
cb2.set_label_text('subfig 2')

plt.figtext(0.05,0.85,'(a)',size=20)
plt.figtext(0.05,0.45,'(b)',size=20)

plt.show()

Вот результат:

результат

Фактические графики - это изображения, поэтому важно, чтобы я поддерживал правильное соотношение сторон для каждого из них.

Я думаю, что пропущенный шаг - получить доступ к осям каждого субплота (а не подпунктов), но я понятия не имею, как это сделать.

Я прочитал документацию и посмотрел примеры на matplotlib.org. Есть примеры, показывающие, как изменить размер отдельных grid[n] но я не могу найти примеры, показывающие, как изменить размер grid, У кого-нибудь есть указатели?

1 ответ

Решение

Для меня указание размера фигуры помогло:

fig = plt.figure(1, (6., 6.))

Я также должен был изменить местоположение figtext:

plt.figtext(0.0,0.85,'(a)',size=20)
plt.figtext(0.0,0.45,'(b)',size=20)

Результат:

Похоже, он сохранил соотношение сторон

Другие вопросы по тегам