我需要用Highcharts绘制数万个(可能是数十万个)点。有没有办法可以在服务器上集群数据,所以它会显示少于1000个点,但是当你放大它时会对服务器进行AJAX调用以获取该缩放区域的数据(它可能会通过相同的聚类算法)。如何与Highcharts API接口?
答案 0 :(得分:3)
有一个highstock演示可以执行此操作http://www.highcharts.com/stock/demo/lazy-loading。 但你可以用highcharts http://jsfiddle.net/RHkgr/做同样的事情。 重要的是afterSetExtremes函数
...
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();
});
}
答案 1 :(得分:2)
以下是芭芭拉答案的改进,
它注册到setExtremes事件, 知道这是否是重置缩放事件。 如果是 - 它获取整个数据集, 从而允许重置缩放功能正常工作。
它还允许放大x和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();
});
}
答案 2 :(得分:0)
如果您没有积分限制,可以增加turboThreshold参数。