2015-07-31 7 views
14

Aşağıdaki sayım grafiğine bakıldığında, yüzdeleri çubukların üstüne nasıl yerleştirebilirim? için Örneğin Denizbaşındaki barların üstünde yüzdeler nasıl eklenir?

enter image description here

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

"İlk" Ben kendi çubukların üstüne toplam İlk erkek/toplam Birincisi, toplam Birinci kadınlar/toplam Birinci ve toplam Önce çocuklar/toplam Birinci istiyorum.

Lütfen açıklamamın açık olmadığını bana bildirin.

Teşekkürler!

cevap

31

sns.barplot açıkça barplot değeri (son paragraf bakınız) yok yol matplotlib.pyplot.bar dönmez, ancak başka bir şey çizilen verdiyseniz eksenleri tüm patches değerleriniz olduğunu varsayarak risk olabilir.

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

alternatif bir yaklaşım alt toplayarak açıkça, örneğin yapmaktır

Countplot

üretir: Sonra barplot fonksiyonu sizin için hesaplanan ettiğini alt toplamları kullanabilirsiniz mükemmel pandas ile ve matplotlib ile arsa ve ayrıca kendiniz şekillendirin. (matplotlib çizme işlevlerini kullanırken bile sns bağlamından oldukça fazla stil elde edebilirsiniz. Bunu deneyin -)

+0

Bu, istediklerime yakın. Açıklamamda açık değildim. 'İlk' yüzdesini 1'e kadar özetlemek istiyorum '' İkincisi '', 1'e kadar, 'Üçüncüsü' toplamı 1'e kadar. –

+1

Bu sadece farklı bir denklemdir - yükseklik/toplamın nerede olduğunu görürsünüz? Onunla kasabaya git. – cphlewis

+0

Bu yaklaşımı beğeniyorum. Bu cevap daha stilize edilmiş bir ek açıklamada yardımcı olabilir: http://stackoverflow.com/questions/19917587/matplotlib-advanced-bar-plot/19919397#19919397 –