изменение размера сюжета на рисунке - PullRequest
1 голос
/ 22 августа 2011

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

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

example

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

Привет

1 Ответ

3 голосов
/ 23 августа 2011

Чтобы настроить размеры экземпляра осей, вам необходимо использовать метод 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()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...