Indicar datos en grafico de barras con matplotlib

publicado por: Anonymous

Estoy trabajando con una tabla que indica el Número del día, la hora del día y un número de visitas

introducir la descripción de la imagen aquí

Y quiero crear un gráfico de barras que indique el número de visitas por cada hora (como el de la imagen)

introducir la descripción de la imagen aquí

Pero, ¿cómo puedo indicar también las horas en cada barra? Algo similar a esto que he hecho con el paint, pero en todas las horas, claro.

introducir la descripción de la imagen aquí

solución

Puedes usar matplotlib.pyplot.text o también matplotlib.pyplot.annotate para añadir el texto que quieras sobre cada columna.

Supongo que tus datos están en un DataFrame de Pandas, por lo que puedes usar pandas.DataFrame.plot.bar para facilitar la creación del gráfico a partir del mismo, aunque la idea es la misma si se usa matplotlib.pyplot.bar directamente.

import pandas as pd
import matplotlib.pyplot as plt



data = {"Dia": (14, 14, 14, 12, 12, 12, 12, 12),
        "Hora": (16, 14, 13, 12, 23, 22, 21, 20),
        "Visita": (5, 2, 6, 19, 8, 47, 13, 51)}

visitsPerDay = pd.DataFrame(data)
ax = visitsPerDay.plot.bar("Dia", "Visita")

for i, bar in enumerate(ax.patches):
    ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 1.5,
            f"{visitsPerDay['Hora'][i]}:00",
            horizontalalignment= 'center', verticalalignment='bottom',
            fontsize=10, rotation=90, color='dimgrey')

ax.set_xlabel("Número del dia")
ax.set_ylabel("Visitas")
ax.margins(x=0, y=0.3)

plt.show()

introducir la descripción de la imagen aquí

Dado que aparentemente la hora la representas como un entero, he usado simplemente formateo de literales de cadena f"{visitsPerDay['Hora'][i]}:00" para asignar la cadena correspondiente a cada barra , si usas Python < 3.6 puedes usar "{}:00".format(visitsPerDay['Hora'][i]).

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *