Я бы обновил 2 вещи в том, как вы чертите это:
установить выравнивание текста - verticalalignment='bottom'
(или сокращение va
), что делает размещение метки нечувствительнымдо длины этикетки.
используйте plt.annotate
вместо plt.text
.Для вашего случая использования параметры очень похожи, но они также устойчивы как к масштабу данных, так и к текущему уровню масштабирования.
xytext=(0,5)
делает начало текста вцентр вашего бара и 5 точек над ним (включая textcoords = 'точки смещения').
for x, y in enumerate(y_data):
plt.annotate('%s' % round(y, 1), xy=(x, y),
xytext=(0, 5), textcoords='offset points',
va='bottom', ha='center', rotation=90)
Для справки, просто для достижения # 1 можно сделать с помощью plt.text
:
for x, y in enumerate(y_data):
plt.text(x, y+300, '%s' % round(y, 1), ha='center',
va='bottom', rotation=90, alpha=0.8)