sns.barplot
kehrt nicht explizit die BarPlot Werte, die die Art und Weise matplotlib.pyplot.bar
hat (siehe letzter Absatz), aber wenn man nichts anderes aufgetragen haben, können Sie riskieren, unter der Annahme, dass alle patches
in den Achsen Ihre Werte sind. Dann können Sie die Zwischensummen verwenden, dass die BarPlot Funktion für Sie berechnet hat:
from matplotlib.pyplot import show
import seaborn as sns
sns.set(style="darkgrid")
titanic = sns.load_dataset("titanic")
total = float(len(titanic)) # one person per row
#ax = sns.barplot(x="class", hue="who", data=titanic)
ax = sns.countplot(x="class", hue="who", data=titanic) # for Seaborn version 0.7 and more
for p in ax.patches:
height = p.get_height()
ax.text(p.get_x()+p.get_width()/2.,
height + 3,
'{:1.2f}'.format(height/total),
ha="center")
show()
produziert
Ein alternativer Ansatz ist es, die Unter Summieren explizit zu tun, zum Beispiel mit dem ausgezeichneten pandas
, und plotten Sie mit matplotlib
, und tun Sie auch das Styling selbst. (Obwohl man von sns
Kontext auch bei Verwendung matplotlib
Plotfunktionen ziemlich viel von Styling bekommen kann. Probieren Sie es aus -)
Das ist nahe, was ich will. Ich war in meiner Erklärung unklar. Ich möchte, dass die Prozentsätze von "First" zu 1 aufsummieren, "Second" zu 1, "Third" zu Summe von 1. –
Das ist nur eine andere Gleichung - Sie sehen, wo "height/total" ist? Gehe damit in die Stadt. – cphlewis
Ich mag diesen Ansatz. Diese Antwort könnte bei einigen mehr stilisierten Anmerkungen helfen: http://stackoverflow.com/questions/19917587/matplotlib-advanced-bar-plot/19919397#19919397 –