У вас есть три варианта.Вы можете выбрать тот, который вам наиболее удобен и прост для понимания.
Вариант 1 : Сместить центры стержней (x-позиции) на 0,5 влево (-0,5) или вправо (+0,5), а затем установите x-ticks на 0,5, 1,5, 2,5 и т. д.
arr = [1, 1, 2, 2, 2, 5, 5, 3]
hist, bin_edges = np.histogram(arr, bins = range(7))
plt.bar(bin_edges[:-1]-0.5, hist)
plt.xlim(min(bin_edges), max(bin_edges))
plt.ticks(bin_edges[:-1]-0.5)
plt.show()

Опция 2 : использоватьalign=edge
, который по умолчанию выровняется по правому краю тиков и примет некоторую толщину по умолчанию (выглядит как 0,8 на рисунке ниже)
plt.bar(bin_edges[:-1], hist, align='edge')

Опция 3 : используйте align=edge
с определенной шириной (положительная ширина будет выравниваться вправо, отрицательная ширина будет выравниваться влево)
plt.bar(bin_edges[:-1], hist, align='edge', width=-0.5)
