2017-03-07 9 views
7

मेरे पास एक डेटासेट है जिसमें विशेषता x, y है और उन्हें x-y सतह में प्लॉट किया जा सकता है।क्या matplotlib स्कैटर प्लॉट बड़ी संख्या में डेटा के लिए धीमा है?

मूल रूप से, मैं कोड

df.plot(kind='scatter', x='x', y='y', alpha=0.10, s=2) 
plt.gca().set_aspect('equal') 

का उपयोग कोड हाल ही में बहुत डेटा के बारे में 50000.

आकार के साथ त्वरित है, मैं आकार के बारे में 2500000. साथ एक नए डाटासेट का उपयोग करें, और बिखराव की साजिश हो जाता है बहुत धीमा

मैं जानना चाहता हूं, अगर यह एक अपेक्षित व्यवहार है, और यदि प्लॉट की गति में सुधार करने के लिए मैं कुछ भी कर सकता हूं?

+3

यह स्पष्ट रूप से अंक की संख्या के संबंध में कम से कम रैखिक है। आपके मार्कर आकार, डिस्प्ले और डीपीआई के आधार पर मैं कल्पना नहीं कर सकता कि इतने सारे बिंदुओं को साकार करने का कोई मतलब नहीं है। तो एक प्राकृतिक दृष्टिकोण: अपने विशाल डेटा को डाउन-नमूना (प्लॉट केवल 10%, यादृच्छिक रूप से चयनित)। जब आप वेक्टर-ग्राफिक्स आधारित स्वरूपों में अपनी साजिश को आउटपुट करना शुरू करते हैं तो यह और भी महत्वपूर्ण हो सकता है। ** संपादित करें: ** मुझे पूरा यकीन है कि अल्फा का उपयोग भी यह बहुत धीमा कर रहा है। यदि आप कुछ घनत्व-साजिश (जोर/छायांकन के उपयोग से) का अनुकरण करना चाहते हैं, तो निश्चित रूप से बेहतर दृष्टिकोण हैं, लेकिन यहां पर्याप्त जानकारी नहीं है – sascha

+0

एक और सुझाव यह है कि आप एक पिक्सेल-आधारित चित्र बना सकते हैं तत्व आकर्षित कर सकते हैं। यह स्मृति की खपत और गति को काफी कम करता है। –

+1

प्रश्न वास्तव में है * "अरे, मैंने एक कारक 50 द्वारा अंक की संख्या में वृद्धि की है और मेरी साजिश गति अचानक 50 गुना धीमी है। क्या कोई मुझे कारण बता सकता है?" *? – ImportanceOfBeingErnest

उत्तर

2

हां, यह है। इसका कारण यह है कि एक हज़ार अंक से अधिक का एक तितर-बितर बहुत कम समझ में आता है, इसलिए कोई भी इसे अनुकूलित करने के लिए परेशान नहीं होता है। आप अपने डेटा के लिए कुछ अन्य प्रतिनिधित्व का उपयोग करना बेहतर कर देंगे:

  • यदि आपके अंक पूरे स्थान पर वितरित किए जाते हैं तो एक हीटमैप। हीटमैप कोशिकाओं को बहुत छोटा बनाएं
  • किसी प्रकार का एक वक्र बनाएं जो वितरण को अनुमानित करता है, हो सकता है कि आप अपने एक्स के साथ अपने वाई को सहसंबंधित करें। कुछ आत्मविश्वास मूल्य प्रदान करना सुनिश्चित करें या किसी अन्य तरीके से वितरण का वर्णन करें; उदाहरण के लिए, उदाहरण के लिए, प्रत्येक x (या x की एक सीमा) के लिए y के एक बॉक्स-साथ-व्हिस्कर का निर्माण करना और उन्हें एक ही ग्रिड पर रखना आमतौर पर बहुत अच्छी तरह से काम करता है।
  • अपने डेटासेट को कम करें। टिप्पणियों में @ सस्चा यादृच्छिक नमूनाकरण का सुझाव देता है, और यह निश्चित रूप से एक अच्छा विचार है। आपके डेटा के आधार पर, प्रतिनिधि बिंदु चुनने का एक बेहतर तरीका हो सकता है।
+0

अच्छी सिफारिशें। हीटमैप/ग्रिड-आधारित दृष्टिकोणों के संबंध में, [यह चर्चा @ एसओ भी योग्य है] (http://stackoverflow.com/questions/7470288/matplotlib-pcolor-very-slow-ternternatives)। – sascha

+0

हां। मैं अन्य साजिश भी बना देता हूं जैसे घनत्व साजिश और अन्य। यह सिर्फ इतना है कि डेटा की खोज करते समय, आप डेटा को कई तरीकों से साजिश करना चाहते हैं। – cqcn1991

+0

आप मानचित्र की तरह कुछ प्लॉट करने का सुझाव कैसे देंगे जहां दीवारें सभी दी जाती हैं, कहें, 1000000 लेटर डेटा पॉइंट्स? – Kyle

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