Eu gerei um gráfico de barra, como posso exibir o valor da barra em cada barra?
Gráfico atual:
O que estou tentando obter:
Meu 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
fonte
fonte
plt.text(v, i, " "+str(v), color='blue', va='center', fontweight='bold')
plt.show()
cláusula no final. Por exemplo:df.plot(); plt.show()
Notei que o código de exemplo da API contém um exemplo de gráfico de barras com o valor da barra exibida em cada barra:
resultado:
FYI Qual é a unidade de variável de altura em "barh" de matplotlib? (a partir de agora, não há maneira fácil de definir uma altura fixa para cada barra)
fonte
Para quem deseja ter seu rótulo na base de suas barras, basta dividir v pelo valor do rótulo assim:
(observação: eu adicionei 100, então não era absolutamente no final)
Para obter um resultado como este:
fonte
v == labels[i]
e então a terceira e a quarta linha poderiam simplesmente ser101, v
?Eu sei que é um tópico antigo, mas cheguei aqui várias vezes pelo Google e acho que nenhuma resposta dada é realmente satisfatória. Tente usar uma das seguintes funções:
EDITAR : Como estou recebendo alguns gostos neste tópico antigo, também quero compartilhar uma solução atualizada (basicamente juntando minhas duas funções anteriores e decidindo automaticamente se é um gráfico de barra ou hbar):
Agora você pode usá-los para gráficos de barra regulares:
ou para gráficos de barra horizontal:
fonte
Use plt.text () para inserir texto no gráfico.
Exemplo:
Isso mostrará a figura como:
gráfico de barras com valores no topo
fonte
plt.text(x=index , y =data+1 , s=f"{data}" , fontdict=dict(fontsize=20), va='center')
Para pessoas pandas:
É isso aí. Alternativamente, para aqueles que preferem fazer um
apply
loop com enumerar:Além disso,
ax.patches
dará a você as barras que você usariaax.bar(...)
. Caso queira aplicar as funções de @SaturnFromTitan ou técnicas de terceiros.fonte
[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))
Eu precisava dos rótulos de barra também, observe que meu eixo y está tendo uma visualização ampliada usando limites no eixo y. Os cálculos padrão para colocar os rótulos no topo da barra ainda funcionam usando a altura (use_global_coordinate = False no exemplo). Mas eu queria mostrar que os rótulos podem ser colocados na parte inferior do gráfico também na visualização ampliada usando coordenadas globais no matplotlib 3.0.2 . Espero que ajude alguém.
fonte
Eu estava tentando fazer isso com barras de plotagem empilhadas. O código que funcionou para mim foi.
fonte
Verifique este link Galeria Matplotlib Foi assim que usei o trecho de código do autolabel.
fonte