Wygenerowałem wykres słupkowy, jak mogę wyświetlić wartość paska na każdym słupku?
Aktualna działka:
Co próbuję uzyskać:
Mój kod:
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
źródło
źródło
plt.text(v, i, " "+str(v), color='blue', va='center', fontweight='bold')
plt.show()
klauzulę na końcu. Na przykład:df.plot(); plt.show()
Zauważyłem, że przykładowy kod API zawiera przykład wykresu słupkowego z wartością paska wyświetlanego na każdym słupku:
wynik:
FYI Jaka jest zmienna jednostka wysokości w „barh” w matplotlib? (na razie nie ma łatwego sposobu na ustawienie stałej wysokości dla każdego pręta)
źródło
Dla każdego, kto chce mieć swoją etykietę u podstawy słupków, wystarczy podzielić v przez wartość etykiety w następujący sposób:
(uwaga: dodałem 100, więc nie było to absolutnie na dole)
Aby uzyskać taki wynik:
źródło
v == labels[i]
i tak trzecia i czwarta linia mogłaby być po prostu101, v
?Wiem, że to stary wątek, ale wylądowałem tu kilka razy przez Google i myślę, że żadna udzielona odpowiedź nie jest jeszcze naprawdę satysfakcjonująca. Spróbuj użyć jednej z następujących funkcji:
EDYCJA : Ponieważ otrzymuję kilka polubień w tym starym wątku, chcę również udostępnić zaktualizowane rozwiązanie (w zasadzie łącząc moje dwie poprzednie funkcje i automatycznie decydując, czy jest to wykres słupkowy, czy hbar):
Teraz możesz ich używać do zwykłych wykresów słupkowych:
lub dla poziomych wykresów słupkowych:
źródło
Użyj plt.text () aby umieścić tekst na wykresie.
Przykład:
Spowoduje to wyświetlenie rysunku jako:
wykres słupkowy z wartościami u góry
źródło
plt.text(x=index , y =data+1 , s=f"{data}" , fontdict=dict(fontsize=20), va='center')
Dla pand:
Otóż to. Alternatywnie, dla tych, którzy wolą
apply
over looping with enumerate:Otrzymasz również
ax.patches
paski, z którymi dostanieszax.bar(...)
. Jeśli chcesz zastosować funkcje @SaturnFromTitan lub techniki innych.źródło
[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))
Potrzebowałem też etykiet prętów, zauważ, że moja oś Y ma powiększony widok z ograniczeniami na osi Y. Domyślne obliczenia dotyczące umieszczania etykiet na górze paska nadal działają z użyciem wysokości (w przykładzie use_global_coordinate = False). Ale chciałem pokazać, że etykiety można umieścić na dole wykresu również w widoku powiększonym, używając współrzędnych globalnych w matplotlib 3.0.2 . Mam nadzieję, że to komuś pomoże.
źródło
Próbowałem to zrobić ze stosem słupków wykresu. Kod, który działał dla mnie, to.
źródło
Sprawdź ten link Galeria Matplotlib Oto jak użyłem fragmentu kodu autolabel.
źródło