2012-03-12 10 views
20

मैं इस उदाहरण में एक धारा ग्राफ चाहते हैं: http://mbostock.github.com/d3/ex/stream.htmlडी 3 वास्तविक समय streamgraph (ग्राफ़ डेटा विज़ुअलाइज़ेशन)

enter image description here

लेकिन मैं सही से प्रवेश वास्तविक समय डेटा पसंद है और पुराने डेटा होता है बाईं ओर से छोड़ दें, जैसे कि मेरे पास हमेशा 200 नमूने की खिड़की होती है। मैं ऐसा कैसे करूं कि मेरे पास उचित संक्रमण हो?

मैं सरणी एक में डेटा बिंदुओं को बदलने और उसके बाद इस तरह के

data0 = d3.layout.stack()(a); 

के रूप में एक क्षेत्र पुनः लेकिन मेरे बदलाव यह देखने के चार्ट की तरह स्क्रीन के पार फिसलने है नहीं बनाते हैं की कोशिश की।

अग्रिम धन्यवाद।

उत्तर

33

this tutorial का प्रयास करें:

जब समय श्रृंखला डेटा का वास्तविक समय प्रदर्शित करता है को लागू करने, हम अक्सर स्थिति के रूप में समय एन्कोड करने के लिए एक्स-अक्ष का उपयोग करें: समय के रूप में प्रगति के नए आंकड़ों सही, और पुराने से आती है डेटा बाईं ओर स्लाइड करता है। आप डी 3 के अंतर्निहित कुछ आश्चर्यजनक व्यवहार path interpolators, हालांकि, आप देख सकते हैं का उपयोग करते हैं ...

लचीलापन देता है को खत्म करने के लिए, अंतर्वेशन पथ बजाय बदलना। यह समझ में आता है यदि आप किसी फ़ंक्शन को विज़ुअलाइज़ करने के रूप में चार्ट के बारे में सोचते हैं- इसका मान बदल नहीं रहा है, हम केवल डोमेन का एक अलग हिस्सा दिखा रहे हैं। एक ही दर है कि नए डेटा आता है पर दिखाई खिड़की फिसलने से, हम मूल रियल टाइम डेटा प्रदर्शित कर सकते हैं ...

+0

धन्यवाद! मैं ट्यूटोरियल के माध्यम से भाग गया, लेकिन मुझे धारा ग्राफ उदाहरण के लिए extrapolate करने की कोशिश में बहुत परेशानी थी। अंततः मैंने अपने एकाधिक पथों को स्थानांतरित करने के लिए कोड की इस पंक्ति का उपयोग किया। vis.selectAll ("पथ")। डेटा (डेटा 0) .attr ("डी", क्षेत्र) .attr ("ट्रांसफॉर्म", शून्य)। ट्रांसमिशन() अवधि (50)। समाप्ति ("रैखिक")। attr ("ट्रांसफॉर्म", "अनुवाद (" + -10 + ")")। प्रत्येक ("अंत", फ़ंक्शन (डी, i) {if (i == 0) संक्रमण();}); मैं केवल पहले पथ पर संक्रमण को कॉल कर सकता हूं, अन्यथा पूरे ग्राफ प्रत्येक पाथ के लिए एक बार बदल जाता है, और फिर मेरे पास कॉलबैक का विस्फोट होता है। क्या ऐसा करने के लिए इससे अच्छा तरीका है? धन्यवाद! – klyngbaek

+0

मैंने अपना उदाहरण यहां पोस्ट किया है: http://lyngbaek.com/real-time-stream-graph.html हर बार नीचे 'पथ' को 'शीर्ष' से गलत तरीके से ग़लत किया जाता है, संभवतः मैं जिस तरह से मेरा रिकर्सिव संक्रमण() कॉल करें। मैंने आपके ट्यूटोरियल से extrapolated और ऊपर और नीचे पथ के लिए एक अलग डेटा सरणी बनाई। तब मैं व्यक्तिगत रूप से उनमें से प्रत्येक के लिए एक नया मूल्य धक्का। मुझे फिर एक नया d3.layout.stack() recompute करना होगा और इसे फिर से निकालना होगा। मैं फिर अपने 2 डेटा सरणी बदलता हूं और दोहराता हूं। क्या यह सही पद्धति है, या ऐसा करने के लिए एक क्लीनर तरीका है। फिर से धन्यवाद! – klyngbaek

+0

मैं अपने प्रश्न के साथ जो कुछ खोज रहा था, वह सबसे अधिक है: http: // stackoverflow।कॉम/प्रश्न/12764813/उत्पादन-ए-लाइव-ग्राफ-साथ-डी 3 आप सर्वर से डेटा को क्लाइंट में प्राप्त करने की अनुशंसा कैसे करते हैं? –

7

यहाँ एक सरल उदाहरण है: http://jsfiddle.net/cqDA9/1/ यह ट्रैक रखने और विभिन्न अद्यतन करने के लिए एक संभव समाधान से पता चलता डेटा श्रृंखला

var update = function() { 
    for (Name in chart.chartSeries) { 
     chart.chartSeries[Name] = Math.random() * 10; 
    } 
    for (Name in chart2.chartSeries) { 
     chart2.chartSeries[Name] = Math.random() * 10; 
    } 
    setTimeout(update, 1000); 
} 
setTimeout(update, 1000); 
संबंधित मुद्दे