2010-05-07 11 views
11

मैं, लेकिन clabel में मैनुअल = सच ध्वज के उपयोग के बिना एक समोच्च भूखंड पर matplotlib clabels के स्थान को नियंत्रित करना चाहते हैं। उदाहरण के लिए, मैं एक एक्स-समन्वय निर्दिष्ट करना चाहता हूं, और इस पंक्ति से गुजरने वाले बिंदुओं पर लेबल बनाए गए हैं। मैं देखता हूं कि आप get_position() का उपयोग कर व्यक्तिगत लेबल का स्थान प्राप्त कर सकते हैं, लेकिन मैं उस पर अटक गया हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा। धन्यवाद!matplotlib कंटूर Clabel स्थान

उत्तर

5

नहीं है, कोई रास्ता नहीं matplotlib में बनाया गया है कि ऐसा करने के लिए है। आपको या तो डिफ़ॉल्ट स्थानों के साथ रहना चाहिए या मैन्युअल के साथ पूरी तरह से इंटरैक्टिव जाना चाहिए और माउस का उपयोग करना चाहिए।

आप नदी के ऊपर एक बग रिपोर्ट के रूप में इस फाइल करने के लिए है ताकि वे अपने एल्गोरिदम सुधार कर सकते हैं चाहते हो सकता है।

कई विकल्प इससे बचने के लिए कर रहे हैं। सबसे पहले प्रोग्रामेटिक रूप से समोच्च आकृति पर टेक्स्ट डालना है। आप इस तरह से पाठ के नीचे लाइनों को विश्वसनीय रूप से हटाने में सक्षम नहीं होंगे। मान लें कि आप एक समोच्च c आप c.collections में समोच्च पंक्तियों पा सकते है। हर समोच्च रेखा के लिए get_paths आह्वान और उस रास्ते पर अपने पाठ जगह।

अन्य विकल्प (matplotlib.contour.BlockingContourLabeler में) कोड है कि लेबल पदों पाता है (matplotlib.contour.locate_label में) tweak मैनुअल प्लेसमेंट के लिए कोड बदलने के लिए या करने के लिए होगा, लेकिन दोनों कार्यों बहुत घने होते हैं। आप locate_label के लिए एक काम प्रतिस्थापन के साथ आ सकते हैं, तो बस अपने साजिश रचने मैक्रो

def your_locate_label(self, linecontour, labelwidth): 
    # some magic 
    pass 

ar = np.array([[1,0], [0,1]] 
c = matplotlib.contour(ar) 
c.locate_label = your_locate_label 

c.clabel() 

Btw में पुराना तरीका ऊपर लिख, अगर आप का उपयोग ipython आप आसानी से

%psource c.clabel 
के साथ अपने इंटरैक्टिव सत्र से समारोह स्रोत देख सकते हैं

या सीधे आह्वान अपने $EDITOR फ़ाइल पर रहे थे यह

%edit c.clabel 
+0

मैं इस मुद्दे को तैनात नहीं मिला, तो मैं बना एक नया एक: https://github.com/matplotlib/matplotlib/issues/613 – keflavich

9

हाँ, वहाँ अब साथ परिभाषित किया गया है लेबल स्थानों को नियंत्रित करने का एक तरीका है! https://github.com/matplotlib/matplotlib/pull/642

plt.figure() 
CS = plt.contour(X, Y, Z) 
manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)] 
plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations) 
+0

मैनुअल एक्स, वाई का एक iterable वस्तु हो सकता है tuples। कंटूर लेबल्स बनाए जाएंगे जैसे माउस प्रत्येक एक्स, वाई पोजीशन पर क्लिक किया जाता है। – Faber

+2

क्या स्वचालित लेबलिंग की अनुमति देने का कोई तरीका है, और उसके बाद अक्षरों को छेड़छाड़ करने वाले किसी भी लेबल को हटाने (और शायद सुधार) करने के लिए लेबल के माध्यम से लूप करें? –