¿Cómo puedo mostrar el valor de la barra en la parte superior de cada barra en matplotlib?

Leí un par de preguntas como la mía, pero nadie parece tener el mismo problema que yo estoy experimentando.

import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt facebook_users = [10, 14, 19, 17, 17, 13, 10] twitter_users = [10, 18, 22, 17, 15, 11, 7] linkedin_users = [4, 10, 20, 18, 20, 17, 11] group = ['13 - 17', '18 - 24', '25 - 34', '35 - 44', '45 - 54', '55 - 65', '65+'] mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=["#3B5998", "c", "grey"]) def bar_group(classes, values, width=0.8): plt.xlabel('Age groups (in years)', weight='semibold') plt.ylabel('Percentage of users (%)', weight='semibold') total_data = len(values) classes_num = np.arange(len(classes)) for i in range(total_data): bars = plt.bar(classes_num - width / 2. + i / total_data * width, values[i], width=width / total_data, align="edge", animated=0.4) plt.xticks(classes_num, classes, rotation=-45, size=11) plt.legend(['Facebook', 'Twitter', 'LinkedIn']) for rect in bars: height = rect.get_height() plt.text(rect.get_x() + rect.get_width()/2.0, height, '%d' % int(height), ha='center', va='bottom') bar_group(group, [facebook_users, twitter_users, linkedin_users]) plt.show() 

Obtengo la etiqueta de la barra solo en la parte superior de la última barra de cada grupo, pero necesito mostrar el valor en la parte superior de cada barra de cada grupo, ¿cómo puedo hacer esto?

La ttwig actual: Esto es lo que estoy recibiendo:

Simplemente mueva su bucle for para escribir los valores de la barra ( plt.text ) dentro del bucle for anterior. El problema es que se escriben los valores de la barra después de trazar las tres barras y, por lo tanto, una vez que sale del trazado for bucle, las bars la variable solo contienen los valores de las barras grises (los datos de LinkedIn ) y, por lo tanto, se ven los valores. Sólo encima de barras grises. Sólo estoy escribiendo la parte necesaria a continuación. El código de reposo sigue siendo el mismo.

 for i in range(total_data): bars = plt.bar(classes_num - width / 2. + i / total_data * width, values[i], width=width / total_data, align="edge", animated=0.4) for rect in bars: height = rect.get_height() plt.text(rect.get_x() + rect.get_width()/2.0, height, '%d' % int(height), ha='center', va='bottom') 

Salida

introduzca la descripción de la imagen aquí