2009-02-03 19 views
7

मेरे पास बड़े डेटा सेट हैं (10 हर्ट्ज डेटा, इसलिए 24 घंटे प्रति 864k अंक) जिन्हें मुझे वास्तविक समय में साजिश करने की आवश्यकता है। विचार यह है कि उपयोगकर्ता अत्यधिक विस्तृत स्कैटर प्लॉट में ज़ूम और पैन कर सकता है।वास्तविक समय में सभी ज़ूम स्तरों पर सटीक रूप से बड़े डेटा वैक्टर कैसे प्लॉट करें?

डेटा बहुत निरंतर नहीं है और स्पाइक्स हैं। चूंकि डेटा सेट इतना बड़ा है, इसलिए जब भी साजिश रीफ्रेश हो जाती है, तो मैं प्रत्येक बिंदु को प्लॉट नहीं कर सकता।

लेकिन मैं सिर्फ हर nth बिंदु प्लॉट नहीं कर सकता हूं या नहीं, मैं बड़ी लेकिन छोटी स्पाइक्स जैसी प्रमुख विशेषताओं को याद करूंगा।

मैटलैब यह सही करता है। आप इसे शून्य से भरा 864k वेक्टर दे सकते हैं और बस किसी एक बिंदु को 1 पर सेट कर सकते हैं और यह वास्तविक समय में ज़ूम और पैन के साथ सही ढंग से प्लॉट करेगा।

मैटलैब यह कैसे करता है?

मेरा लक्ष्य सिस्टम जावा है, इसलिए मैं स्विंग/जावा 2 डी में इस साजिश के विचार उत्पन्न करूँगा।

+0

मैं वास्तव में समझ नहीं पा रहा हूं कि आप यहां क्या पूछ रहे हैं। क्या आप MATLAB में डेटा की साजिश कैसे बना रहे हैं इसका एक कोड उदाहरण जोड़ सकते हैं? – gnovice

+0

क्या आपका प्रश्न जावा प्रश्न या मैटलैब प्रश्न है? –

+0

मैं सोच रहा हूं कि मैटलैब कैसे करता है, इसलिए मैं इसे जावा – Pyrolistical

उत्तर

4

आप MATLAB सेंट्रल से फ़ाइल प्रयास करना चाहिए:

https://mathworks.com/matlabcentral/fileexchange/15850-dsplot-downsampled-plot

लेखक से:

"साजिश" के इस संस्करण में आप डेटा कल्पना करने के लिए अनुमति देगा कि तत्वों की बहुत बड़ी संख्या है। बड़े डेटा सेट को प्लॉट करने से आपके ग्राफिक्स आलसी हो जाते हैं, लेकिन अधिकांश बार आपको साजिश में प्रदर्शित सभी जानकारी की आवश्यकता नहीं होती है। आपकी स्क्रीन में केवल इतना पिक्सल हैं, और आपकी आंखें स्क्रीन पर कैप्चर की गई किसी भी जानकारी का पता लगाने में सक्षम नहीं होंगे।

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

सिंटेक्स:

dsplot(x, y) 
dsplot(y) 
dsplot(x, y, numpoints) 

उदाहरण:

x =linspace(0, 2*pi, 1000000); 
y1=sin(x)+.02*cos(200*x)+0.001*sin(2000*x)+0.0001*cos(20000*x); 
dsplot(x,y1); 
2

मैं कैसे Matlab यह होता है पता नहीं है, लेकिन मैं Quadtrees के साथ शुरू होगा।

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

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

0

10Hz डेटा का अर्थ है कि आपको केवल प्रति सेकंड 10 फ्रेम प्लॉट करना होगा। यह आसान होना चाहिए, क्योंकि कई गेम> अधिक जटिल ग्राफिक्स के साथ 100 एफपीएस प्राप्त करते हैं।

यदि आप प्रत्येक संभावित डेटा बिंदु के लिए प्रति सेकंड 10 पिक्सल प्लॉट करते हैं तो आप 600 पिक्सेल चौड़े विजेट का उपयोग करके एक मिनट का डेटा प्रदर्शित कर सकते हैं। यदि आप 600 वें सूचकांक को पिछले नमूने में सहेजते हैं तो इसे केवल नवीनतम डेटा खींचना आसान होना चाहिए।

यदि आपके पास एक सेकंड के प्रत्येक 10 वें स्थान पर कोई नया डेटा-पॉइंट नहीं है तो आपको एक इंटरपोलेटेड डेटा-पॉइंट डालने के तरीके के साथ आना होगा। तीन विकल्प दिमाग में आते हैं:

  1. अंतिम डेटा-बिंदु दोहराएं।
  2. एक "खाली" डेटा-बिंदु डालें। यह ग्राफ में अंतराल का कारण बन जाएगा।
  3. अगले डेटा-बिंदु आने तक ग्राफ को अपडेट न करें। फिर डेटा पिक्चर्स के बीच रैखिक इंटरपोलेशन के साथ, एक बार में खींचे गए सभी पिक्सेल डालें।

एनीमेशन चिकनी उपयोग double-buffering बनाने के लिए। यदि आपकी लक्षित भाषा कैनवास विजेट का समर्थन करती है तो यह संभवतः डबल-बफरिंग का समर्थन करती है।

जब ज़ूम करना आपके ऊपर समान तीन विकल्प हैं, क्योंकि ज़ूम किए गए डेटा-पॉइंट निरंतर नहीं हैं, भले ही मूल डेटा-पॉइंट थे।

This जावा में इसे लागू करने में मदद कर सकता है।

+0

में पुन: पेश करता हूं क्षमा करें, जब मैंने "वास्तविक समय" कहा, तो मेरा मतलब था कि साजिश को पढ़ने के समय में होना चाहिए, लेकिन डेटा स्थिर है। – Pyrolistical

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