Etiquetas de barras

La función (y el método) hist no dispone de una forma sencilla para mostrar los valores de los bins, cosa que, frecuentemente, resulta extremadamente conveniente. Pero podemos conseguirlo de la siguiente forma: ya hemos visto que, de los tres valores devueltos por la función hist, el tercero es una lista con referencias a los objetos gráficos que forman la gráfica (en el caso del histograma dichos elementos son objetos rectágulo). Si buceamos un poco por la página con la documentación veremos que estos objetos disponen de varios métodos que devuelven su posición y dimensiones: get_height, get_width, get_xy, get_x y get_y, por ejemplo, de forma que podemos mostrar los valores de los bins (que devuelve la función) en una posición relativa a la posición del rectángulo con la función ya vista matplotlib.pyplot.text. El código sería el siguiente:

fig, ax = plt.subplots()
v, m, g = ax.hist(y, bins = 20)
for i, rect in enumerate(g):
    posx = rect.get_x()
    posy = rect.get_height()
    ax.text(posx + 0.03, posy + 30, int(v[i]), color='black', fontsize = 8)
plt.show()

Tras crear el histograma y recoger el resultado en las variables v, m y g, recorremos con un buble for cada uno de los rectángulos referenciados en g. Para cada uno de ellos extraemos su posición x y su altura (que será aproximadamente la posición y del texto a mostrar) utilizando los métodos get_x y get_height. Por último, mostramos el valor del bin (contenido en v[i]) en la posición (posx, posy) tras ajustar estos valores un poco (este ajuste se hace a mano para que los valores queden más o menos centrados y algo por encima del borde superior del bin, pero podrían haberse mostrado por debajo, por ejemplo). El valor v[i] se convierte a número entero para evitar mostrar decimales que, en este caso, no aportarían mucho y ocuparían espacio de forma innecesaria. El resultado sería el siguiente:

Histograma con etiquetas de barras