2011-08-18 14 views
15

तो figure में जहां तीन लंबवत सबप्लॉट add_subplot के साथ जोड़े गए हैं, तो मैं मध्य का चयन कैसे कर सकता हूं?मैटलप्लिब में प्रोग्रामेटिक रूप से एक विशिष्ट सबप्लॉट का चयन कैसे कर सकता हूं?

[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]

जहां मैं बस सूचकांक मैं चाहता हूँ चुन सकते हैं, इसी axes साथ:

अभी मैं इस सूची समझ है। क्या ऐसा करने का एक और सीधा तरीका है?

उत्तर

14

matplotlib documentation से:

आंकड़ा पहले से ही कुंजी (args, kwargs) के साथ एक subplot है तो फिर वह बस उस subplot वर्तमान बनाने के लिए और यह वापस आ जाएगी।

import matplotlib.pyplot as plt 

fig = plt.figure() 
for vplot in [1,2,3]: 
    ax = fig.add_subplot(3,1,vplot) 
    ax.plot(range(10),range(10)) 

ax_again = fig.add_subplot(3,1,2) 
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5)) 

plt.show() 

बीच साजिश फिर से कहा जाता है इतना है कि यह टिप्पणी की जा सकती:

यहाँ एक उदाहरण है।

यदि मैं अपनी मूल कॉल के साथ पृष्ठभूमि सेट करता हूं, तो क्या मुझे दूसरी बार सबप्लॉट मिलने पर इसे फिर से सेट करने की आवश्यकता है?

हां। मूल कॉल के लिए तर्क और कीवर्ड का उपयोग एक अद्वितीय पहचानकर्ता बनाने के लिए किया जाता है। इसलिए इस अद्वितीय पहचानकर्ता को फिर से उत्पन्न करने के लिए, आपको एक ही तर्क (ग्रिड परिभाषा, स्थिति) और कीवर्ड फिर से पारित करने की आवश्यकता है। उदाहरण के लिए:

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(2,1,1,axisbg='red') 
ax.plot(range(10),range(10)) 
ax = fig.add_subplot(2,1,2) 
ax.plot(range(10),range(10)) 

ax_again = fig.add_subplot(2,1,1,axisbg='red') 
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5)) 

plt.show() 

क्या होगा यदि मैं का उपयोगax_again.change_geometry()?

आपको लगता है कि change_geometry, उदा। 312 से 422 तक, आप add_subplot का उपयोग कैसे करेंगे, लेकिन यह नहीं होगा। जब आप change_geometry को कॉल करते हैं तो एक बग या अपरिभाषित व्यवहार प्रतीत होता है। पहली add_subplot कॉल में, तर्क और कीवर्ड का उपयोग करके उत्पन्न मूल कुंजी, अद्यतन नहीं होती है। इसलिए, यदि आप एक add_subplot कॉल के साथ अक्ष को वापस प्राप्त करना चाहते हैं, तो आपको मूल तर्क और कीवर्ड के साथ add_subplot को कॉल करने की आवश्यकता है। https://github.com/matplotlib/matplotlib/issues/429

अब के लिए मेरा अनुमान है कि अगर आप add_subplot कॉल के साथ यह पैदा करने के बाद subplot के किसी भी संपत्ति को बदलने, अद्वितीय समायोजित नहीं किया जा जाएगा: अधिक जानकारी के लिए, यह समस्या रिपोर्ट का पालन करें। तो बस मूल तर्क और कीवर्ड का उपयोग करें, और उम्मीद है कि यह काम करेगा।

+3

मैन मैंने उन दस्तावेज़ों के माध्यम से घंटों बिताए हैं, लेकिन मैं अभी भी उस महत्वपूर्ण भाग को नजरअंदाज करने में कामयाब रहा हूं। धन्यवाद – c00kiemonster

+1

मेरी इच्छा है कि मैं अंदर से matplotlib समझ गया। यह निश्चित रूप से मेरे काम को आसान बना देगा। मुझे थोड़ी देर लग गई, और दस्तावेज़ों से इन विवरणों को छेड़छाड़ करना निश्चित रूप से आसान नहीं है। मैं यह देखने की कोशिश कर रहा हूं कि क्या आप प्रारंभिक कॉल में kwargs पास करते हैं, क्या आपको उन्हें दूसरी बार बिल्कुल वही पास करना होगा, जैसा कि दस्तावेज़ सुझाव देते हैं। अगर मैं कुछ भी लेकर आऊंगा तो मैं चीजों को अपडेट करूंगा। – Yann

+1

तो यह पता चला है कि आकृति वर्ग में एक निजी सदस्य फ़ंक्शन _make_key है जो '(बनाता है) एक हैशबल कुंजी तर्क और kwargs से बाहर है; इसका उपयोग उप-स्थान की पहचान करने के लिए किया जाता है (और मुझे लगता है कि एक आकृति से संबंधित सभी अक्ष)। तो हाँ आपको वही तर्क और कीवर्ड का सटीक उपयोग करने की आवश्यकता है। – Yann