2011-05-29 16 views
30

मैं एक matplotlib पाई चार्ट बनाना चाहता हूं जिसमें wedge के शीर्ष पर लिखे गए प्रत्येक वेज का मूल्य है।मैं matplotlib autopct का उपयोग कैसे करूं?

documentation सुझाव देता है कि मुझे ऐसा करने के लिए autopct का उपयोग करना चाहिए।

ऑटोपैक्ट: [कोई नहीं | प्रारूप स्ट्रिंग | प्रारूप फ़ंक्शन] यदि कोई नहीं है, तो उनके संख्यात्मक मान वाले वेजेज को लेबल करने के लिए उपयोग की जाने वाली स्ट्रिंग या फ़ंक्शन है। लेबल वेज के अंदर रखा जाएगा। यदि यह प्रारूप स्ट्रिंग है, तो लेबल fmt% pct होगा। यदि यह एक फ़ंक्शन है, तो यह कहलाएगा।

दुर्भाग्य से, मुझे यकीन है कि यह प्रारूप स्ट्रिंग या प्रारूप फ़ंक्शन क्या होना चाहिए।

नीचे दिए गए इस मूल उदाहरण का उपयोग करके, मैं प्रत्येक संख्यात्मक मूल्य को अपने वेज के शीर्ष पर कैसे प्रदर्शित कर सकता हूं?

plt.figure() 
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels) #autopct?? 
plt.show() 

उत्तर

68

autopct आपको पायथन स्ट्रिंग स्वरूपण का उपयोग करके प्रतिशत मान प्रदर्शित करने में सक्षम बनाता है। उदाहरण के लिए, यदि autopct='%.2f', तो प्रत्येक पाई वेज के लिए, प्रारूप स्ट्रिंग '%.2f' है और उस वेज के लिए संख्यात्मक प्रतिशत मान pct है, इसलिए वेज लेबल '%.2f'%pct स्ट्रिंग पर सेट है।

import matplotlib.pyplot as plt 
plt.figure() 
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels, autopct='%.2f') 
plt.show() 

पैदावार Simple pie chart with percentages

आप autopct करने के लिए एक प्रतिदेय की आपूर्ति करके अधिक सजावटी काम कर सकें। दोनों प्रतिशत मूल्य और मूल मान प्रदर्शित करने के लिए, आप ऐसा कर सकता है:

import matplotlib.pyplot as plt 

# make the pie circular by setting the aspect ratio to 1 
plt.figure(figsize=plt.figaspect(1)) 
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 

def make_autopct(values): 
    def my_autopct(pct): 
     total = sum(values) 
     val = int(round(pct*total/100.0)) 
     return '{p:.2f}% ({v:d})'.format(p=pct,v=val) 
    return my_autopct 

plt.pie(values, labels=labels, autopct=make_autopct(values)) 
plt.show() 

Pie chart with both percentages and absolute numbers.

फिर, प्रत्येक पाई कील के लिए, matplotlib प्रतिशत मूल्य pct तर्क के रूप में की आपूर्ति, हालांकि इस बार यह है फंक्शन my_autopct पर तर्क के रूप में भेजा गया। वेज लेबल my_autopct(pct) पर सेट है।

+0

ग्रेट। यह सब अब स्पष्ट है। आपके उत्तर के लिए बहुत बहुत धन्यवाद। – Kim

+0

कस्टम ऑटोपॉक्ट फ़ंक्शन में आप पैरामीटर कैसे आपूर्ति कर सकते हैं? I.e - यदि आप चर 'मान' में 'my_autopct' में भेजना चाहते हैं। – cosmosa

+2

@ cosmos1990: 'plt.pie'' autopct' फ़ंक्शन को परिवर्तनीय, प्रतिशत मान, 'pct' का कार्य करने की अपेक्षा करता है। हालांकि, आप [एक बंद] [http://effbot.org/zone/closure.htm) बना सकते हैं - "एक ऐसा फ़ंक्शन जो पर्यावरण को संदर्भित कर सकता है जो अब सक्रिय नहीं है"। मैंने उपरोक्त पोस्ट को कैसे दिखाया है यह दिखाने के लिए। अब 'मान' 'me_autopct' को पास किया गया है, और' make_autopct (मान) 'रिटर्न * बंद *' my_autopct'। जब 'my_autopct' कहा जाता है, तो यह' make_autopct' के 'संलग्नक क्षेत्र] में' मानों 'को देखेगा (http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules)। – unutbu

8
val=int(pct*total/100.0) 

val=int((pct*total/100.0)+0.5) 

राउंडिंग त्रुटियों को रोकने के होना चाहिए।

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