Я бы использовал pyplot.text() или pyplot.annotate() (ну или соответствующие методы ax).
Они позволяют указывать координаты текста в единицах данных (т.е. в координатных осях на твоём графике). А маркеры по умолчанию ставятся на каждую точку данных, так что привязать текст к тем же точкам что и маркеры будет тривиально - просто цикл по данным и вызов метода на каждую позицию.
for xv, yv in zip(x, y):
caption = f'{yv:.0f}' # тут генеришь надпись так, как тебе надо
ax.text(xv, yv, caption, ha='center', va='top') # по умолчанию координаты задаются по данным