2012-11-15 16 views
21

कहें कि मेरे पास ax नामक एक matplotlib अक्ष है, और मैं इसके कई गुण सेट करना चाहता हूं। वर्तमान में, मैं इसे इस तरह करता हूं:matplotlib आकृति/अक्ष गुणों को सेट करने का पसंदीदा तरीका

ax.set_yscale('log') 
ax.set_xlim([0,10]) 
ax.set_xlabel('some label') 

लेकिन यह थोड़ी देर बाद थकाऊ हो जाता है। फिर मैं इस विधि में भाग गया:

ax.set(yscale='log', xlim=[0,10], xlabel='some label') 

अधिक संक्षिप्त, लेकिन यह थोड़ा अनियंत्रित लगता है। मैं सभी दस्तावेज़ कहते है मतलब "एक tkstyle सेट आदेश, गुणों को सेट करने kwargs पारित"।

पसंदीदा या मुहावरेदार तरीका क्या है? set विधि एपीआई स्थिर है?

उत्तर

14

Pyplot tutorialax.set_xxx() फ़ंक्शंस की अनुशंसा करता है, लेकिन .setp(xxx=) का भी उल्लेख करता है।

दूसरी ओर, .set(xxx=) फ़ंक्शन का उपयोग नहीं किया जाता है और .setp(xxx=), दस्तावेज़ के दौरान, किसी भी उदाहरण (Pyplot API) में उपयोग नहीं किया जाता है।

मैं समझता हूं कि matplotlib अनिवार्य प्रोग्रामिंग शैली और मैटलैब जैसी शैली दोनों का समर्थन करता है। पहले से ही अजगर से परिचित लोगों और जो लोग पहले मैटलैब इस्तेमाल किया - कारण लक्ष्य उपयोगकर्ता ठिकानों जा रहा है।

मैं निष्कर्ष निकालना matplotlib सिफारिश की है कि एपीआई .set_xxx() है।

gallery के माध्यम से एक त्वरित जांच यह पुष्टि करता है।

इसी तरह की द्वंद्व कार्यशीलताओं के लिए कीवर्ड तर्कों के लिए समान द्वंद्व मौजूद है, सिवाय इसके कि अनिवार्य एपीआई स्पष्ट नहीं है।

+0

उत्तर स्पष्ट matplotlib api शामिल हैं। मैं दोनों विकल्प उपलब्ध और दस्तावेज पसंद करेंगे। –

+0

ग्रेट उत्तर, धन्यवाद। सुनिश्चित नहीं है कि 'setp (xxx = y) 'या' set_xxx (y) 'अधिक" पायथनिक "है, लेकिन दोनों बिल्कुल ऑब्जेक्ट उन्मुख दृष्टिकोण नहीं हैं; उत्तरार्द्ध ऊपर और नीचे और matplotlib वर्ग के उदाहरणों के पागल पदानुक्रम में नेविगेट करेगा, और कभी-कभी चुपचाप कक्षा गुणों को सेट करता है या नए वर्ग के उदाहरणों के साथ एक सरल/संख्यात्मक इनपुट को प्रतिस्थापित करता है (उदाहरण के लिए 'set_xticklabels (y)' '' '' 'ticker ' .FixedFormatter (y) ')। दोनों केवल ऑब्जेक्ट उन्मुख-आश हैं। –

2

मैं आमतौर पर matplotlib के लिए pyplot (इंटरैक्टिव) इंटरफेस का उपयोग करता हूं, जो setp फ़ंक्शन (जिसे मैं अक्सर उपयोग करता हूं) का खुलासा करता है।

matplotlib सेट करने के लिए() ("सेट संपत्ति") और getp() setp के उपयोग का समर्थन और वस्तु के गुण, साथ ही वस्तु पर आत्मनिरीक्षण करने के लिए मिलता है।

>>> x = arange(0,1.0,0.01) 
>>> y1 = sin(2*pi*x) 
>>> y2 = sin(4*pi*x) 
>>> lines = plot(x, y1, x, y2) 
>>> setp(lines, linewidth=2, color='r') 

मैं setp समारोह अनुमान लगा रहा हूँ वास्तव में पारित कर दिया वस्तु की set फ़ंक्शन को कॉल:

आप ऊपर सिर्फ अपने set समारोह की तरह बातें करते हैं, जिसकी मदद से ही आप एक पैरामीटर के रूप में स्थापित करने के लिए वस्तु पारित जो पता लगाने और kwargs स्थापित करने के लिए काम करता है।

तो मेरे विचार कर रहे हैं, कि दस्तावेज की कमी के बावजूद वस्तु की set विधि लाइन द्वारा kwargs बजाय लाइन के माध्यम से कई मानकों की स्थापना के लिए मुहावरेदार दृष्टिकोण है।

मेरे 2 सेंट।

4

इस सवाल का एक सुपर देर फॉलोअप के रूप में:

ax.set_xlim(4) और ax.set(xlim=4) अंततः एक ही बात कर रहे हैं, तो आप क्या पसंद करते हैं। ax.set(kwarg=foo) कुछ स्ट्रिंग मैनिपुलेशन के माध्यम से ax.set_kwarg(foo) पर कॉल करता है, क्योंकि आप देख सकते हैं कि आप स्रोत को देखते हैं या नहीं। विभिन्न सेटर फ़ंक्शंस ज्यादातर एक-लाइनर हैं, साथ ही साथ काम करने के लिए आत्मनिर्भर setp की अनुमति देने के लिए मौजूद हैं।

0

मेरे पास matplotlib बैकएंड के साथ समान समस्याएं हैं और इसलिए मैं इस पोस्ट में आया हूं। मैं उम्मीद कर रहा था कि matplotlib एक साजिश में गुणों के लिए शब्दकोश नियंत्रण के उपयोग की अनुमति देगा। @Chris Zeh द्वारा सुझाव का उपयोग करके आप:

f = {'xlabel': 'x1', 'ylabel': 'x2'} 
[setp(ax, formati, formatj) for formati, formatj in f.items()] 

जो मेरी समस्याओं का समाधान करता है। उम्मीद है की यह मदद करेगा।

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