Если вы переместите последние три строки вашего первого примера на один уровень отступа, так что они являются частью предложения "else", которое устанавливает цвет на фиолетовый, который должен это сделать.
[Редактировать: Извините, я неправильно прочитал. Это также оставило бы текст во 2-й строке. Насколько я знаю, нет способа получить цвет прямоугольника, но вы могли бы сделать:
rects = ax.bar(ind, num, width, color=colors)
rect = rects[-1]
height = int(rect.get_height())
if height < 5:
yloc = height + 2
else:
yloc = height / 2.0
clr = '#182866'
p = 'H37Rv'
xloc = rect.get_x() + (rect.get_width() / 2.0)
ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')
Это установит текст только в последней строке.
Если это может быть любая полоса, которая может быть фиолетовой, не обязательно последней, ну, у вас есть список цветов, с которыми вы инициализировали прямоугольники, так:
rects = ax.bar(ind, num, width, color=colors)
for i in range(len(colors):
if colors[i] == purple: # or however you specified "purple" in your colors list
labelled_rects.append(i)
for i in labelled_rects:
rect = rects[i]
height = int(rect.get_height())
if height < 5:
yloc = height + 2
else:
yloc = height / 2.0
clr = '#182866'
p = 'H37Rv'
xloc = rect.get_x() + (rect.get_width() / 2.0)
ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')