#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()
Результат:
Ответ №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. В противном случае удвоить высоту второго и пятого синих графиков?