Mam dziesiątki tysięcy (być może setki tysięcy) punktów, które muszę opracować w Highcharts. Czy istnieje sposób, w jaki mogę zgrupować dane na serwerze, więc będzie on pokazywał mniej niż 1000 punktów, ale w miarę zbliżania się będzie wywoływał AJAX na serwerze, aby uzyskać dane dla tego powiększonego regionu (prawdopodobnie przez to przebiegnie ten sam algorytm klastra). Jak ten interfejs z interfejsem API Highcharts?Zestaw Highcharts dużych zestawów danych
Odpowiedz
Tutaj jest poprawa na odpowiedź Barbary,
Rejestruje do zdarzenia setExtremes, wiedzieć, czy jest to zdarzenie resetowania zoom. Jeśli tak jest - pobiera cały zestaw danych, , umożliwiając poprawne działanie zoomu.
Umożliwia także powiększanie zarówno w osi X, jak i Y.
var isReset = false;
...
xAxis: {
events: {
afterSetExtremes : afterSetExtremes,
setExtremes: function (e) {
if (e.max == null || e.min == null) {
isReset = true;
}
else
{
isReset = false;
}
}
},
minRange: 3600 * 1000 // one hour
},
series: [{
data: data,
dataGrouping: {
enabled: false
}
}]
});
});
});
/**
* Load new data depending on the selected min and max
*/
function afterSetExtremes(e) {
var url,
currentExtremes = this.getExtremes(),
range = e.max - e.min;
var chart = $('#container').highcharts();
var min = 0;
var max = 1.35e12;
if(!isReset)
{
min = e.min;
max = e.max;
}
chart.showLoading('Loading data from server...');
$.getJSON('http://www.highcharts.com/samples/data/from-sql.php?start=' + Math.round(min) +
'&end=' + Math.round(max) + '&callback=?', function (data) {
chart.series[0].setData(data);
chart.hideLoading();
});
}
Istnieje demonstracja highstock, która wykonuje to http://www.highcharts.com/stock/demo/lazy-loading. Ale można zrobić to samo z highcharts http://jsfiddle.net/RHkgr/ Ważne bit jest afterSetExtremes funkcjonować
...
xAxis : {
events : {
afterSetExtremes : afterSetExtremes
},
...
/**
* Load new data depending on the selected min and max
*/
function afterSetExtremes(e) {
var url,
currentExtremes = this.getExtremes(),
range = e.max - e.min;
var chart = $('#container').highcharts();
chart.showLoading('Loading data from server...');
$.getJSON('http://www.highcharts.com/samples/data/from-sql.php?start='+ Math.round(e.min) +
'&end='+ Math.round(e.max) +'&callback=?', function(data) {
chart.series[0].setData(data);
chart.hideLoading();
});
}
W innej notatce, że jsfiddle nie działa poprawnie, spróbuj powiększyć, a następnie reseting. Musi on ponownie pobrać oryginalne dane. – Ray
W przypadku, gdy nie będzie miał limit punktów, można zwiększyć turboThreshold paramter.
Próbowałem tego i nie jest to praktyczne, ponieważ muszę wspierać IE8: "( – Ray
Masz na myśli, że progresja turbosprężarki nie działa w IE8? Czy mógłbyś odtworzyć swój przykład w jsfiddle.net? –
Nie, IE8 nie radzi sobie dobrze z tak wieloma obiektami, będzie Cię wiele razy pytać, czy chcesz zabić scenariusz, – Ray
Zgaduję, że muszę złapać 'selected' zdarzenie, a następnie pojawi się ekran ładowania, a następnie AJAX połączenie, a następnie usunąć dane i dodać nowe dane, ale jak to robił powiększanie pracować, ponieważ ta metoda nie wyjaśniałaby tego. – Ray
Właściwie to myślę, że to może zadziałać. Myślę, że uwzględniłoby to powiększanie, ponieważ osie byłyby następnie aktualizowane. Musiałbym po prostu pokazać przycisk Reset Zoom, który wyświetliłby oryginalne dane. – Ray