2011-12-14 14 views
16

मैं हाईचार्ट्स के चार्ट "अनियमित अंतराल के साथ समय डेटा" का उपयोग कर रहा हूं। जैसा कि आप जानते हैं कि जब माउस लाइन के बिंदुओं पर चलता है तो फॉर्मेटर फ़ंक्शन चलता है और कुछ जानकारी दिखाता है। मैं इस बिंदु के सूचकांक को जानना चाहता हूं कि माउस उस पर चलता है। तो यदि माउस लाइन के पहले बिंदु पर चलता है, तो टूलटिप "1" दिखाता है और दूसरा बिंदु "2" दिखाता है और इसी तरह। thnx।हाईचार्ट्स में किसी बिंदु की अनुक्रमणिका कैसे प्राप्त करें?

+2

एडगर के जवाब सबसे अच्छा प्रतीत होता है, कोई संसाधन की आवश्यकता। –

उत्तर

58

यह मेरे लिए काम किया v2.2 का उपयोग कर:

this.series.data.indexOf(this.point) 
+0

मेरे लिए भी काम किया। सरल! –

+3

उत्कृष्ट, लघु और सरल !!! हालांकि मुझे नहीं लगता कि आपको ** इस.point ** (कोष्ठक में) की आवश्यकता है, केवल ** यह ** –

+0

यह स्वीकार्य उत्तर होना चाहिए। स्वीकृत उत्तर एक बदसूरत हैक है। –

0

यह हैकी के रूप में आता है, और अंक के बहुत से नरक के रूप में धीमा हो जाएगा, लेकिन यह काम करेगा।

tooltip: { 
    formatter: function() { 
     for(var i=0;i<this.series.data.length;i++){ 
       var item = this.series.data[i]; 
       if(item.x == this.x && item.y == this.y) 
       return 'point ' + i; 
     } 
     return 'not found' 
    } 
    } 

लाइव उदाहरण: http://jsfiddle.net/Fuv4h/

+0

यह वही है जो मैं चाहता हूं। लेकिन जैसा कि आपने बताया है कि लाइन को अंक से भरा होने पर विशेष रूप से निष्पादित करने में इतना समय लगता है। बीटीडब्ल्यू मैं आपको धन्यवाद देता हूं। – Morteza

11

एक तरह से पूर्व की प्रक्रिया के लिए डेटा है सामान्य विचार 'श्रृंखला के डेटा में सभी बिंदुओं के माध्यम से देखने के लिए जब तक आप वर्तमान बिंदु मिलान एक मिल रहा है इंडेक्स के साथ एक संपत्ति है।

function prepare(dataArray) { 
    return dataArray.map(function (item, index) { 
     return {x: item[0], y: item[1], myIndex: index}; 
    }); 
}; 

{ x: x, y: y, myIndex: i} की तरह एक वस्तु होने की [x, y] की सरणी परिवर्तित करने के लिए: स्नो गहराई उदाहरण में आप इस तरह की तैयारी कर सकता है। फिर इसके साथ फ़ॉर्मेटर में है कि सूचकांक को लेने के लिए आसान:

formatter: function() { 
    return 'point ' + this.point.myIndex; 
} 

उदाहरण पर jsfiddle

+1

यह कोड अधिक तेज़ लगता है। मैं इसे अपने प्रोजेक्ट में जितनी जल्दी हो सके परीक्षण कर सकता हूं। थेंक्स ईल्सन। – Morteza

+0

हां, यह सूचकांक की खोज करने से तेज़ होना चाहिए, लेकिन अधिक मेमोरी का उपयोग करेगा। – eolsson

+1

वाह ..अब मुझे पता चला है कि मैं ऑब्जेक्ट सरणी में नाम, एक्स, वाई, नोट के अलावा और अधिक विशेषताओं को जोड़ सकता हूं। उस –

4

रिकॉर्ड अपने एक अच्छा तरीका में सीधे यह कर सकते हैं के लिए

यह में दुकान है:

this.points[0].point.x 
+0

यह मेरे लिए काम करता है, सुनिश्चित नहीं है कि आप क्यों नीचे उतर गए हैं। – MightyPork

+0

मैं आपको बता सकता हूं कि यह क्यों कम हो गया: क्योंकि यह एक्स की सामग्री पर निर्भर करता है। मेरे मामले में एक्स एक तारीख थी, इसलिए मुझे तिथियां मिलीं। हालांकि 'श्रृंखला मैपिंग' का उपयोग करके मैंने अपने सीएसवी के तीसरे कॉलम को एक वास्तविक इंडेक्स में मैप किया और फिर इस लाइन का उपयोग करके इसे एक्सेस किया :) मेरे द्वारा +1 –

1

चूंकि डेटा सॉर्ट किया गया है, तो आप binary search का उपयोग कर सकते हैं।

एक बाइनरी खोज को बड़ी संख्या में अंक (विकिपीडिया लेख से: "के लिए भी अच्छा प्रदर्शन करना चाहिए: उदाहरण के लिए, दस लाख वस्तुओं की सूची खोजने के लिए रैखिक खोज के साथ एक मिलियन पुनरावृत्तियों को लेते हैं, लेकिन कभी भी नहीं द्विआधारी खोज साथ बीस पुनरावृत्तियों "

उदाहरण:।

var bsComparator = function(a, b) { 
    if (a.x < b.x) { return -1; } 
    if (a.x > b.x) { return 1; } 
    return 0; 
}; 
var binarySearch = function(series_data, point) { 
    var low = 0, high = series_data.length - 1, 
     i, comparison; 
    while (low <= high) { 
     i = Math.floor((low + high)/2); 
     comparison = bsComparator(series_data[i], point); 
     if (comparison < 0) { low = i + 1; continue; } 
     if (comparison > 0) { high = i - 1; continue; } 
     return i; 
    } 
    return null; 
}; 


tooltip: { 
    formatter: function() { 
     var pointIndex = binarySearch(this.series.data, this.point); 
     return "Point index: " + pointIndex; 
    } 
} 

(binarySearch समारोह ऊपर http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/ से प्रेरित है)

1

सौ आपके जैसे रुझानों को केवल xAxis मान की आवश्यकता है (यानी। पहर)। उपयोग करें: this.xData.indexOf(point.x)

इस पॉइंट को बड़ी श्रृंखला में समूहीकृत किया जाएगा, इसलिए अंक [0] ... अंक [n] के माध्यम से गहरी खोज की आवश्यकता होगी।

1

यह सब है कि Highstock जे एस v4.2.4 पर मेरे लिए काम किया है:

var index = this.points[0].point.dataGroup.start; 
संबंधित मुद्दे

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