изменение размера сюжета на рисунке

1

Я создаю фигуру с 4 подзаголовками (2 x 2), где 3 из них имеют тип imshow а другой - errorbar. На каждом imshow есть цветная панель с правой стороны. Я хотел бы изменить размер моего третьего сюжета, чтобы область графика была точно под той, что была над ним (с цветом colorbar)

как пример (это то, что у меня сейчас есть):

Изображение 174551

Как я могу изменить размер 3-го сюжета?

С уважением

Теги:
matplotlib

1 ответ

3
Лучший ответ

Чтобы отрегулировать размеры экземпляра осей, вам нужно использовать метод set_position(). Это относится и к subplotAxes. Чтобы получить текущую позицию/размеры оси, используйте метод get_position(), который возвращает экземпляр Bbox. Для меня концептуально проще просто взаимодействовать с позицией, т.е. [Левая, нижняя, правая, верхняя] границы. Чтобы получить доступ к этой информации из Bbox, свойство bounds.

Здесь я применяю эти методы к чему-то, аналогичному вашему примеру выше:

import matplotlib.pyplot as plt
import numpy as np

x,y = np.random.rand(2,10)
img = np.random.rand(10,10)

fig = plt.figure()
ax1 = fig.add_subplot(221)
im = ax1.imshow(img,extent=[0,1,0,1])

plt.colorbar(im)
ax2 = fig.add_subplot(222)
im = ax2.imshow(img,extent=[0,1,0,1])
plt.colorbar(im)

ax3 = fig.add_subplot(223)
ax3.plot(x,y)
ax3.axis([0,1,0,1])

ax4 = fig.add_subplot(224)
im = ax4.imshow(img,extent=[0,1,0,1])
plt.colorbar(im)

pos4 = ax4.get_position().bounds
pos1 = ax1.get_position().bounds
# set the x limits (left and right) to first axes limits
# set the y limits (bottom and top) to the last axes limits
newpos = [pos1[0],pos4[1],pos1[2],pos4[3]]

ax3.set_position(newpos)

plt.show()

Вы можете почувствовать, что два сюжета точно не выглядят одинаково (в моем рендеринге позиция слева или xmin не совсем правильная), поэтому не стесняйтесь настраивать позицию, пока не получите желаемый эффект.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню