Вычитание каждой ширины из максимальной и деление на два, чтобы установить левую начальную точку стержней, привело бы к центрированным стержням. Numpy помогает в написании выражений кратко.
Штанга стандартно использует "липкие" края. Вертикальные полосы устойчиво стоят на основании y=0
вместо того, чтобы зависать в воздухе. Турники стандартно приклеиваются к основанию x=0
. Установка use_sticky_edges
для графика ax
в значение False удаляет это значение по умолчанию и помогает придать симметричный c аспект.
При желании метки также могут быть центрированы.
import numpy as np
import matplotlib.pyplot as plt
h = [12, 22, 19, 5]
r = ['page 1', 'page 2', 'page 3', 'page 4']
h = np.array(h)
plt.gca().use_sticky_edges = False
plt.barh(r, width=h, left=(h.max() - h) / 2, align='center', color='crimson')
for ri in r:
plt.text(h.max() / 2, ri, ri, ha='center', va='center', color='white', size=16)
plt.yticks([]) # optionally remove standard y ticks and their labels
plt.show()
![example plot](https://i.stack.imgur.com/lAZD1.png)
PS: Идея поместить x=0
в центр, это удвоить ширину и позволить столбцам начинаться с -h
:
plt.barh(r, width=h*2, left=-h, align='center', color='crimson')
for ri in r:
plt.text(x=0, y=ri, s=ri, ha='center', va='center', color='white', size=16)