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);
Другие вопросы по тегам