Как я могу сделать высоту каждого подзаголовка согласованной в matplotlib.pyplot?

#python #matplotlib

#python #matplotlib

Вопрос:

Следующая программа генерирует шесть подзаголовков. Но высота каждого подзаголовка противоречива. Как я могу сделать высоту каждого подзаголовка согласованной?

 import numpy as np

import matplotlib.pyplot as plt

plt.figure()
a=np.random.random((100*100*3))
b=np.random.random((100,100,3))

ax1=plt.subplot2grid((2,4),(0,0),colspan=1,rowspan=1)
ax1.axis('off')
ax1.imshow(b)
ax2=plt.subplot2grid((2,4),(0,1),colspan=2)
ax2.hist(a,bins=30,range=(0,1))
ax3=plt.subplot2grid((2,4),(0,3),colspan=1)
ax3.axis('off')
ax3.imshow(b)

ax4=plt.subplot2grid((2,4),(1,0),colspan=1,rowspan=1)
ax4.imshow(b)
ax4.axis('off')
ax5=plt.subplot2grid((2,4),(1,1),colspan=2)
ax5.hist(a,bins=30,range=(0,1))
ax6=plt.subplot2grid((2,4),(1,3),colspan=1)
ax6.axis('off')
ax6.imshow(b)

plt.tight_layout()
plt.show()
  

введите описание изображения здесь

Комментарии:

1. «Но высота каждого подзаголовка согласована. Как я могу сделать высоту каждого подзаголовка согласованной» перечитайте это сообщение

Ответ №1:

Подзаголовками можно манипулировать в конце, изменяя их расположение и размеры. Вот соответствующий код, который был добавлен ранее plt.show() .

 ...
#... some code above
plt.figure(figsize=(10,4))
#... some code here
...

# manipulate some subplots
p2 = ax2.get_position()
p3 = ax3.get_position()
newpx = [p2.x0, p3.y0, p2.width, p3.height]

# set location and size of `ax2` subplot
ax2.set_position(newpx, which='both')

p5 = ax5.get_position()
p6 = ax6.get_position()
newpx = [p5.x0, p6.y0, p5.width, p6.height]

# set location and size of `ax5` subplot
ax5.set_position(newpx, which='both')

plt.tight_layout()
plt.show()
  

Результат:

2x3 подзаголовков

Ответ №2:

Если вы используете add_subplot() вместо subplot2grid() , все графики будут иметь одинаковый размер. Почему следует subplor2grid() использовать?

 import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
a=np.random.random((100*100*3))
b=np.random.random((100,100,3))

ax1 = fig.add_subplot(2, 3, 1)
ax1.axis('off')
ax1.imshow(b)

ax2 = fig.add_subplot(2, 3, 2)
ax2.hist(a,bins=30,range=(0,1))

ax3 = fig.add_subplot(2, 3, 3)
ax3.axis('off')
ax3.imshow(b)

ax4 = fig.add_subplot(2, 3, 4)
ax4.imshow(b)
ax4.axis('off')

ax5 = fig.add_subplot(2, 3, 5)
ax5.hist(a,bins=30,range=(0,1))

ax6 = fig.add_subplot(2, 3, 6)
ax6.axis('off')
ax6.imshow(b)

plt.tight_layout()
plt.show()
  

введите описание изображения здесь

Комментарии:

1. Потому что я хочу удвоить длину второго и четвертого подзаголовков, сохранив высоту неизменной. Что мне делать?

2. В противном случае удвоить высоту второго и пятого синих графиков?