Highcharts downsampling - CSV
Я разрабатываю веб-приложение и использую плагин JS Highcharts, чтобы помочь мне нарисовать некоторые графики. Иногда я загружаю файл CSV с более чем 100 000 строк с 4 столбцами.
Очевидно, что плагин диаграммы встретит некоторые проблемы. Итак, я не могу напрямую уменьшить мой CSV-файл, но нашел плагин Downsampling Highcharts ( http://www.highcharts.com/plugin-registry/single/13/Highcharts-Downsample), который выполняет эту работу!
Но на самом деле этот плагин может только инициализировать серию с пороговым значением.. И я не знаю, как применить этот метод к моей серии, загруженной CSV..
Я загружаю свой CSV таким образом вместо атрибута "series", указанного плагином. Использование:
data: {csv: csv},
Док плагин говорит нам использовать его так:
series: [{
downsample: {
threshold: 1000 // 0 disables downsampling for this series.
},
data: // Your data (array of arrays with two values or array of numerical values)
}]
Но я не использую атрибут "series", потому что я загружаю серию напрямую из файла CSV...
Итак, я хочу найти решение для сокращения моего CSV-файла с помощью этого плагина Hicharts.
Спасибо вам большое!
1 ответ
Итак, наконец, я нашел решение! Я сам анализирую свой CSV-файл и могу указать атрибут downsample:
var options = { //Initialize my chart's option
chart: {
zoomType: 'x',
renderTo: $('#chart-'+unused)[0]
},
title: {
text: elem.title
},
credits: {
enabled: false
},
xAxis: {
categories: [], //initialize empty category array
type: "line"
},
yAxis: {
title: {
text: "milli-SI"
}
},
series: [] //initialize empty serie array
};
var lines = csv.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
if (lineNo == 0) {
$.each(items, function(itemNo, item) {
if (itemNo > 0) {
var series = {
data: [],
name: item,
downsample : {threshold: 2000} //initialize downsample for a specific serie
};
options.series.push(series);
}
});
}
else {
$.each(items, function(itemNo, item) {
if (item.length == 0)
return;
if (itemNo == 0) {
options.xAxis.categories.push(item);
} else {
options.series[itemNo -1].data.push(parseFloat(item));
}
});
}
});
var chart = new Highcharts.Chart(options);