2013-08-23 6 views
6

मैं एक हिस्टोग्राम बनाने की कोशिश कर रहा हूं जो एक अलग सितारा रेटिंग (1-5) में प्रति मान की रेटिंग दिखाएगा। प्रति मान एक बार होना चाहिए, और एक्स-अक्ष में दिखाए जाने वाले केवल संख्याएं प्रत्येक बार (केंद्रित) के नीचे [1,2,3,4,5] हैं।बार प्रति अलग मूल्य के साथ बार चार्ट/हिस्टोग्राम कैसे बनाएं?

मैं 5 या अपनी सीमा को डिब्बे की राशि की स्थापना की कोशिश की 0-7 से हो सकता है, लेकिन यह है कि (छवि आपूर्ति में के रूप में)

enter image description here

यह वह जगह है सलाखों है कि मूल्यों पर होते हैं बनाता है कोड मैं कोशिश की है (पांडा और numpy):

df.stars.hist() 

और

hist, bins = np.histogram(x1, bins=5) 
ax.bar(bins[:-1], hist.astype(np.float32)/hist.sum(), width=(bins[1]-bins[0]), color="blue") 

उत्तर

8

आप plot(kind='bar') विधि का उपयोग कर सकते हैं:

stars = Series(randint(1, 6, size=100)) 
vc = stars.value_counts().sort_index() 
ax = vc.plot(kind='bar') 
fig = ax.get_figure() 
fig.autofmt_xdate() 

पाने के लिए:

enter image description here

संपादित करें # 1: उन्हें दिखाने के लिए के रूप में अनुपात सिर्फ sum

vc /= float(vc.sum()) 
assert vc.sum() == 1 
से विभाजित

प्राप्त करने के लिए:

enter image description here

संपादित करें # 2: उन्हें दिखाने के लिए के रूप में प्रतिशत राशि से विभाजित ऊपर और प्रारूप कल्पना मिनी भाषा का प्रयोग के रूप में स्वरूपित करने के लिए y- अक्ष टिक लेबल

new_labels = ['{0:.0%}'.format(float(x.get_text())) for x in ax.get_yticklabels()] 
ax.set_yticklabels(new_labels) 

पाने के लिए :

enter image description here

+0

धन्यवाद, यह बढ़िया है! मैं वास्तव में कुल डेटा से प्रतिशत के रूप में राशि दिखा रहा हूं, प्रस्तावित दृष्टिकोण का उपयोग करके आप इसे कैसे करेंगे? – d1337

संबंधित मुद्दे