После долгих поисков и желаний ударить головой по моему столу, я отправляю свой первый вопрос о stackoverflow.HighCharts Загрузка из файла CSV со многими точками данных
У меня есть веб-приложение ASP.NET, которое генерирует некоторые данные на стороне сервера и создает CSV-файл на сервере.
Я использую HighCharts для создания графика. Тем не менее, все работает отлично, в зависимости от того, какой диапазон дат пользователь запускает, может быть несколько точек данных или множество точек данных.
Проблема возникает, когда есть много точек данных. Посмотрите на ось X, и вы поймете, что я имею в виду. Нужно ли «группировать» их там, где они не показывают каждую точку на оси Х?
Даты находятся в произвольных интервалах.
Я создал JSFiddle с кодом моей клиентской стороны и содержимым моего CSV-файла в переменной JavaScript.
Вот мой код:
function parseDate(dateStr) {
var matches = dateStr.match(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})/)
return Date.UTC(matches[3], matches[1]-1, matches[2]);
}
var csv = 'Chart,3/4/2007,3/24/2007,4/13/2007,4/25/2007,9/19/2007,9/28/2007,11/5/2007,1/7/2008,1/14/2008,1/21/2008,1/27/2008,2/3/2008,2/10/2008,2/17/2008,2/24/2008,3/2/2008,3/23/2008,3/30/2008,4/5/2008,4/21/2008,5/3/2008,5/10/2008,5/17/2008,5/24/2008,5/31/2008,6/8/2008,6/15/2008,6/29/2008,7/4/2008,7/18/2008,7/25/2008,8/1/2008,8/8/2008,9/17/2010,11/25/2010,8/16/2012,1/17/2013,1/27/2013\nDates,180.00,175.50,167.00,166.50,170.00,171.50,174.00,163.00,162.50,164.00,166.50,166.50,167.50,170.00,170.00,171.00,169.00,166.50,166.00,166.50,162.00,160.00,160.50,162.50,164.00,164.00,165.00,165.50,166.00,169.00,171.00,170.00,171.00,165.00,165.00,189.00,177.00,175.50';
var options = {
chart: {
renderTo: 'chart',
defaultSeriesType: 'line'
},
title: {
text: 'Test Chart'
},
xAxis: {
type: 'datetime',
categories: []
},
yAxis: {
title: {
text: 'Pounds'
}
},
series: []
};
// Split the lines
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) options.xAxis.categories.push(parseDate(item));
});
}
else {
var series = {
data: []
};
$.each(items, function(itemNo, item) {
if (itemNo == 0) {
series.name = item;
} else {
series.data.push(parseFloat(item));
}
});
options.series.push(series);
}
});
var chart = new Highcharts.Chart(options);
Вот ссылка на JSFiddle:
Заранее спасибо,
Роберт
Спасибо большое! Мне удалось заставить его работать с минимальными изменениями, как вы сказали. Не возражаете ли вы снова взглянуть на JSFiddle? http://jsfiddle.net/Q2hyF/8/ Я обновил его, но что случилось с датами? Что мне не хватает, или что не так? Это выглядит намного лучше! –
Вопрос: Почему вы нажимаете метки по категориям? Я подозреваю, что вы можете переформатировать данные в формат [timestamp, data], например, набор данных, используемый для основного примера HighStocked: [link] (http://www.highcharts.com/samples/data/jsonp.php?filename = AAPL-c.json & обратный вызов =?) –