2013-02-13 78 views
5

मैं प्रत्येक प्लॉट को रीफ्रेश करने का प्रयास कर रहा हूं जो हर बार एक गुई के भीतर होता है जब मैं एक बार फिटिंग प्रक्रिया के माध्यम से जाता हूं। इसके अलावा, ये भूखंड एक framw के भीतर हैं जो आकार बदल सकते हैं, इसलिए आकार बदलने के बाद axes और लेबल आदि को फिर से खींचा जाना चाहिए। तो सोच रहा था कि क्या कोई जानता है कि plot.figure.canvas.copy_from_bbox और blit जैसी किसी चीज़ का उपयोग करके किसी आकृति के किनारे को कैसे अपडेट किया जाए। ऐसा लगता है कि ग्राफिंग क्षेत्र की पृष्ठभूमि (जहां रेखाएं खींची जा रही हैं) की प्रतिलिपि बनाते हैं और उन्हें ग्राफ़ या आकृति के किनारों पर नहीं (जहां लेबल और टिक हैं)। मैं अपने ग्राफ को परीक्षण और त्रुटि और एमपीएल दस्तावेज पढ़ने के लिए अद्यतन करने की कोशिश कर रहा हूं, लेकिन अब तक मेरा कोड self.this_plot.canvas_of_plot..etc.etc.. .plot.figure.canvas.copy_from_bbox जैसी चीज़ों के साथ बेहद जटिल हो गया है ... जो शायद बहुत दूर है। मुझे पता है कि मेरी भाषा थोड़ी दूर हो सकती है लेकिन मैं matplotlb प्रलेखन के माध्यम से पढ़ने की कोशिश कर रहा हूं और चित्रा, कैनवास, ग्राफ, साजिश, आकृति के बीच अंतर। फिगर, आदि मुझे बचाना शुरू कर रहे हैं। तो मेरा पहला और सबसे बड़ा सवाल होगा:पायथन matplotlib आकृति या आकृति के किनारों पर blit?

1 - आप matplotlib साजिश के आस-पास की टिक और लेबल कैसे अपडेट करते हैं।

और दूसरा, के बाद से मैं इस सवाल का क्या जवाब पर एक बेहतर समझ होनी चाहते हैं,

2 - के संबंध में एक भूखंड, आंकड़ा, कैनवास, आदि में क्या अंतर है क्षेत्र जो वे जीयूआई में शामिल हैं।

सहायता के लिए बहुत बहुत धन्यवाद।

उत्तर

14

यह सब निश्चित रूप से पहले भ्रमित हो सकता है!

यदि आप टिक टिक रहे हैं, तो शुरू करने के लिए, ब्लिटिंग का उपयोग करने में बहुत कुछ नहीं है। अगर कुछ चीजें बदल रही हैं तो सब कुछ फिर से खींचने से बचने का एक तरीका है। अगर सबकुछ बदल रहा है, तो ब्लिटिंग का उपयोग करने में कोई बात नहीं है। बस साजिश दोबारा खींचे।

असल में, तुम सिर्फ fig.canvas.draw() या plt.draw()

किसी भी हाल में चाहते हैं अपने पहले सवाल का जवाब देने, ज्यादातर मामलों में आप उन्हें मैन्युअल अद्यतन करने की आवश्यकता नहीं होगी। यदि आप धुरी सीमा बदलते हैं, तो वे स्वयं अपडेट हो जाएंगे। आप समस्याओं में भाग ले रहे हैं क्योंकि आप साजिश को फिर से निकालने के बजाय अक्ष के अंदर बस मार रहे हैं।

आपके दूसरे प्रश्न के लिए, Matplotlib User's Guide के Artist Tutorial एक अच्छा, विस्तृत अवलोकन है।

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

मैटलप्लिब प्लॉट में आप जो कुछ भी देख सकते हैं वह Artist है। (उदा। पाठ, एक रेखा, अक्ष, और यहां तक ​​कि आकृति भी।) एक कलाकार ए) जानता है कि खुद को कैसे आकर्षित करें, और बी) अन्य कलाकारों को शामिल कर सकते हैं।

किसी कलाकार को स्वयं आकर्षित करने के लिए, यह FigureCanvas उर्फ ​​"कैनवास" पर आकर्षित करने के लिए रेंडरर (एक बैकएंड-विशिष्ट मॉड्यूल जिसे आप लगभग कभी नहीं स्पर्श करेंगे) का उपयोग करता है (वेक्टर-आधारित पृष्ठ के चारों ओर एक अमूर्तता या एक पिक्सेल बफर)। किसी आकृति में सब कुछ खींचने के लिए, आप canvas.draw() पर कॉल करें।

क्योंकि कलाकार अन्य कलाकारों के समूह हो सकते हैं, चीजों के लिए एक पदानुक्रम है।असल में, ऐसा कुछ (जाहिर है, यह भिन्न होता है):

Figure 
    Axes (0-many) (An axes is basically a plot) 
     Axis (usually two) (x-axis and y-axis) 
      ticks 
      ticklabels 
      axis label 
     background patch 
     title, if present 
     anything you've plotted, e.g. Line2D's 

उम्मीद है कि चीजों को एक स्पर्श स्पष्ट बनाता है, वैसे भी।

यदि आप वास्तव में टिक लेबल अपडेट करने के लिए ब्लिटिंग का उपयोग करना चाहते हैं, तो आपको उन्हें शामिल करने वाले पूरे क्षेत्र को पकड़ना और पुनर्स्थापित करना होगा। यह क्षेत्र प्राप्त करने में थोड़ा मुश्किल है, क्योंकि यह तक ड्रॉ-टाइम के बाद बिल्कुल ज्ञात नहीं है (मैटलप्लिब में प्रतिपादन पाठ लेटेक्स समर्थन आदि के कारण अन्य चीजों को प्रस्तुत करने से अधिक जटिल है)। आप इसे कर सकते हैं, और अगर आप वास्तव में क्या चाहते हैं तो मुझे एक उदाहरण देने में खुशी होगी, लेकिन यह आमतौर पर सबकुछ खींचने पर गति का लाभ नहीं उठाएगा। (अपवाद यह है कि यदि आप बहुत सारे सबप्लॉट वाले आकृति में केवल एक सबप्लॉट अपडेट कर रहे हैं।)

+4

matplotlib तत्वों के इस अद्भुत सारांश के लिए आपको बहुत बहुत धन्यवाद। मुझे पता है कि मॉड्यूल की समग्र संरचना को समझने के संदर्भ में यह मेरे लिए और वेब पर कई अन्य लोगों के लिए उपयोगी होगा। – chase

+0

यह उत्कृष्ट है। मैं एक अच्छा सारांश के लिए 2 साल की खोज कर रहा हूं कि कैसे चित्र/अक्ष/एक्सिस वर्गों को संबंधित होना चाहिए! – tbc