2015-07-31 10 views
14

In Anbetracht der folgenden Grafendarstellung wie platziere ich Prozentsätze auf die Balken?Wie können Prozentsätze auf Balken in Seaborn hinzugefügt werden?

import seaborn as sns 
sns.set(style="darkgrid") 
titanic = sns.load_dataset("titanic") 
ax = sns.countplot(x="class", hue="who", data=titanic) 

enter image description here

Zum Beispiel für "First" Ich mag gesamt First Männer/total Erstens insgesamt Erste Frauen/gesamt First und insgesamt Erste Kinder/total auf ihre jeweiligen Bars Erste.

Bitte lassen Sie mich wissen, wenn meine Erklärung nicht klar ist.

Danke!

Antwort

31

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

Countplot

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 -)

+0

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. –

+1

Das ist nur eine andere Gleichung - Sie sehen, wo "height/total" ist? Gehe damit in die Stadt. – cphlewis

+0

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 –

Verwandte Themen