Genere un diagrama de barras, ¿cómo puedo mostrar el valor de la barra en cada barra?
Trama actual:
Lo que estoy tratando de conseguir:
Mi código:
import os
import numpy as np
import matplotlib.pyplot as plt
x = [u'INFO', u'CUISINE', u'TYPE_OF_PLACE', u'DRINK', u'PLACE', u'MEAL_TIME', u'DISH', u'NEIGHBOURHOOD']
y = [160, 167, 137, 18, 120, 36, 155, 130]
fig, ax = plt.subplots()
width = 0.75 # the width of the bars
ind = np.arange(len(y)) # the x locations for the groups
ax.barh(ind, y, width, color="blue")
ax.set_yticks(ind+width/2)
ax.set_yticklabels(x, minor=False)
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
#plt.show()
plt.savefig(os.path.join('test.png'), dpi=300, format='png', bbox_inches='tight') # use format='svg' or 'pdf' for vectorial pictures
python
matplotlib
bar-chart
Franck Dernoncourt
fuente
fuente
plt.text(v, i, " "+str(v), color='blue', va='center', fontweight='bold')
plt.show()
cláusula al final. Por ejemplo:df.plot(); plt.show()
He notado que el código de ejemplo de API contiene un ejemplo de gráfico de barras con el valor de la barra que se muestra en cada barra:
salida:
FYI ¿Cuál es la unidad de la variable de altura en "barh" de matplotlib? (a partir de ahora, no hay una manera fácil de establecer una altura fija para cada barra)
fuente
Para cualquiera que desee tener su etiqueta en la base de sus barras, simplemente divida v por el valor de la etiqueta de esta manera:
(nota: agregué 100 por lo que no estaba absolutamente en la parte inferior)
Para obtener un resultado como este:
fuente
v == labels[i]
y entonces la tercera y cuarta línea podrían ser simplemente101, v
?Sé que es un hilo antiguo, pero aterricé aquí varias veces a través de Google y creo que ninguna respuesta dada es realmente satisfactoria todavía. Intente utilizar una de las siguientes funciones:
EDITAR : Como estoy obteniendo algunos Me gusta en este antiguo hilo, también quiero compartir una solución actualizada (básicamente uniendo mis dos funciones anteriores y decidiendo automáticamente si es un gráfico de barras o hbar):
Ahora puede usarlos para gráficos de barras normales:
o para gráficos de barras horizontales:
fuente
Utilice plt.text () para poner texto en el gráfico.
Ejemplo:
Esto mostrará la figura como:
gráfico de barras con valores en la parte superior
fuente
plt.text(x=index , y =data+1 , s=f"{data}" , fontdict=dict(fontsize=20), va='center')
Para la gente de los pandas:
Eso es. Alternativamente, para aquellos que prefieren hacer
apply
bucles con enumerate:Además,
ax.patches
te dará las barras con las que obtendríasax.bar(...)
. En caso de que quieras aplicar las funciones de @SaturnFromTitan o técnicas de otros.fuente
[ax.text(i, v, '{:.2f}%'.format(100*v)) for i, v in enumerate(s)];
for p in ax.patches: ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))
También necesitaba las etiquetas de las barras, tenga en cuenta que mi eje y tiene una vista ampliada usando límites en el eje y. Los cálculos predeterminados para colocar las etiquetas en la parte superior de la barra aún funcionan usando la altura (use_global_coordinate = False en el ejemplo). Pero quería mostrar que las etiquetas también se pueden colocar en la parte inferior del gráfico en la vista ampliada usando coordenadas globales en matplotlib 3.0.2 . Espero que ayude a alguien.
fuente
Estaba tratando de hacer esto con barras de trama apiladas. El código que funcionó para mí fue.
fuente
Verifique este enlace Galería Matplotlib Así es como usé el fragmento de código de autolabel.
fuente