Если вы не возражаете против того, чтобы крайняя правая полоса была немного смещена от центра метки, вы можете просто слегка переместить ее влево, чтобы она соответствовала.
Если вы печатаете то, что возвращается При вызове bar()
вы видите, что это BarContainer
объект с 5 исполнителями:
<BarContainer object of 5 artists>
..., который вы можете перебирать:
Rectangle(xy=(-0.175, 0), width=0.35, height=20, angle=0)
Rectangle(xy=(0.825, 0), width=0.35, height=34, angle=0)
Rectangle(xy=(1.825, 0), width=0.35, height=30, angle=0)
Rectangle(xy=(2.825, 0), width=0.35, height=35, angle=0)
Rectangle(xy=(3.825, 0), width=0.35, height=27, angle=0)
Каждый Rectangle
объект имеет метод set_xy () . Таким образом, вы можете переместить последний верхний и нижний столбец следующим образом:
bar, bar2 = rects1[4], rects2[4]
bar.set_xy((bar.get_x()-0.05,bar.get_y()))
bar2.set_xy((bar2.get_x()-0.05,bar2.get_y()))
, поместив вышеуказанный код чуть ниже вашего
rects1 = ax.bar(x, men_means, width, label='Men')
rects2 = ax.bar(x, women_means, width, bottom=men_means, label='Women')
и убрав свой вызов на subplots_adjust()
и используя tight_layout()
вместо этого, я смог добиться этого:
В качестве альтернативы, если вы не возражаете против расстояния между меткой и уменьшение полосы вы можете просто изменить rect.get_x() + 3
на rect.get_x() + 2.5
в функции autolabel()
, чтобы получить это: