Sto utilizzando la tabella "Dati temporali con intervalli irregolari" di Highcharts. Come sapete quando il mouse si sposta su punti di linea, la funzione di formattazione viene eseguita e mostra alcune informazioni. Voglio sapere l'indice del punto in cui il mouse si muove su di esso. Quindi, se il mouse si sposta sul primo punto della linea, il suggerimento mostra "1" e il secondo punto mostra "2" e così via. thnx.Come ottenere l'indice di un punto in Highcharts?
risposta
questo ha lavorato per me usando v2.2:
this.series.data.indexOf(this.point)
Ha funzionato anche per me. Semplice! –
eccellente, breve e semplice !!!. anche se non credo tu abbia bisogno del ** this.point ** (tra parentesi), solo ** questo ** –
Questa dovrebbe essere la risposta accettata. La risposta accettata è un brutto scherzo. –
Questo è un po 'hacky come viene, e diventerà lento con un sacco di punti, ma funzionerà. L'idea generale è quella di guardare attraverso tutti i punti dei dati della serie fino a trovare quello che corrisponde al punto corrente:
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'
}
}
vivo esempio: http://jsfiddle.net/Fuv4h/
Questo è esattamente quello che voglio. Ma come hai detto questo codice impiega così tanto tempo ad eseguirlo specialmente quando la linea è piena di punti. A proposito, ti ringrazio. – Morteza
Un modo è quello di pre-elaborare i dati a contenere una proprietà con l'indice Nell'esempio neve profonda che si possa fare una preparazione come questo:
function prepare(dataArray) {
return dataArray.map(function (item, index) {
return {x: item[0], y: item[1], myIndex: index};
});
};
per convertire la matrice di [x, y]
ad essere un oggetto come { x: x, y: y, myIndex: i}
. Poi il suo facile da prendere che indice nel formattatore con:
formatter: function() {
return 'point ' + this.point.myIndex;
}
Esempio su jsfiddle
Questo codice sembra più veloce. Lo collaudo nel mio progetto non appena posso. Thnx Eolsson. – Morteza
Sì, dovrebbe essere più veloce della ricerca dell'indice, ma utilizzerà più memoria. – eolsson
Wow ..Ora sono venuto a sapere che posso aggiungere più attributi oltre al nome, x, y, nota nell'array di oggetti. +1 per quello –
Per la cronaca il tuo grado di farlo direttamente in un modo carino
Si tratta di conservare in:
this.points[0].point.x
Questo funziona per me, non so perché hai downvoted. – MightyPork
Posso dirti esattamente perché questo è stato downvoted: perché si basa sul contenuto di X per essere un indice. Nel mio caso X era un appuntamento, quindi ho ricevuto le date. Comunque usando 'seriesMapping' ho mappato la terza colonna del mio CSV ad un indice reale e poi l'ho acceduto usando questa linea :) +1 da me –
Poiché i dati sono ordinati, è possibile utilizzare uno binary search.
Una ricerca binaria dovrebbe funzionare bene anche per un numero elevato di punti (dall'articolo di Wikipedia: "Ad esempio, per cercare un elenco di un milione di elementi richiede più di un milione di iterazioni con ricerca lineare, ma mai più di venti iterazioni con ricerca binaria "
Esempio:.
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;
}
}
(la funzione binarySearch sopra si ispira http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/)
Sou nds come te ha solo bisogno del valore xAxis (ad es. tempo). Utilizzare: this.xData.indexOf(point.x)
questo.punti saranno raggruppati in serie più grandi quindi sarebbe necessaria una ricerca più approfondita attraverso i punti [0] ... punti [n].
Questo è tutto ciò che ha funzionato per me su Highstock JS v4.2.4:
var index = this.points[0].point.dataGroup.start;
- 1. Come modificare dinamicamente un punto dati in Highcharts utilizzando JavaScript
- 2. Highcharts evidenziare un singolo punto sulla linea
- 3. Highcharts prima del primo punto
- 4. Highcharts => Ottenere l'id di un punto quando si fa clic su un grafico a linee
- 5. highcharts personalizza il suggerimento per un singolo punto
- 6. Highcharts - innesco manuale dell'evento hover su un punto
- 7. Come ottenere più dati di serie in Highcharts tooltip?
- 8. Come ottenere Il punto centrale di un ArcSegment in WPF
- 9. Come ottenere rangeSelector per lavorare con HighCharts
- 10. Come ottenere l'id della serie in Highcharts/Highstock
- 11. Come usare dotnet highcharts dll per mostrare HighCharts in MVC3?
- 12. Aggiornamento dinamico di più serie in highcharts
- 13. creare un suggerimento appiccicoso per un punto o un'etichetta permanente utilizzando HighCharts
- 14. Come ottenere una filigrana immagine nei grafici HighCharts?
- 15. Highcharts - Evento doppio clic
- 16. Highcharts: Come impostare dataGrouping
- 17. Ruota un punto in un altro punto in 2D
- 18. Istogrammi grafici in Highcharts
- 19. Come convertire un punto di vista GeoPoint in un punto dello schermo dell'hardware
- 20. Highcharts panning
- 21. come ottenere punto rubinetto (coordinate) in iOS rapida
- 22. Come ottenere due valori da uno, punto libero, in Haskell?
- 23. Come ottenere il punto di tocco attuale e il punto di tocco precedente nel metodo UIPanGestureRecognizer?
- 24. Highcharts - Disegna punto croce/suggerimenti sulla posizione del mouse invece di eseguire lo snap al punto dati
- 25. etichette di colonne highcharts
- 26. come aggiungere il testo dell'annotazione ad un grafico Highcharts?
- 27. Ottenere il punto più vicino sulla griglia al punto
- 28. Come posso spostare la legenda in Highcharts?
- 29. Highcharts - etichette all'interno e all'esterno di un grafico a torta
- 30. Highcharts - export to base64
risposta di Edgar sembra essere il migliore, senza elaborazione richiesta. –