Как я могу динамически обновлять атрибут серии pointStart из highcharts.js?

У меня есть очень простая диаграмма highcharts js, которая имеет даты по оси x и значения по оси y. Он отлично работает с этим кодом:

chart = new Highcharts.Chart({
    chart: {
        renderTo: 'chart_container',
        type: 'line',
    },
    xAxis: {
        type: 'datetime',
            dateTimeLabelFormats: { 
                day: '%e / %b'              
            }
    },
    yAxis: {
            title: {
                text: null
            },              
            tickInterval: 1,
            tickmarkPlacement: 'on',
            min: 1,
            max: 5
    },
    series: [{
            name: 'serie_1',
            pointInterval: 24 * 3600 * 1000, // one day
            pointStart: Date.UTC(2011, 11, 22),            
            data: [
                2, 3, 5, 4, null, 4, 4, 4, 4, 3, 2, 2, 1, 2, 2, null               
            ]
   }]
});

У меня также есть событие, которое изменяет данные диаграммы при запуске какого-либо действия:

function reloadChart(){
    $.get('/my/ajax/link/', { ajax_param: 10 },                                         
        function(data){
            // HOW TO GET THIS TO WORKS??? series.pointStart is readonly
            chart.series[0].pointStart = data.newPointStart;

            chart.series[0].setData(data.data, true);
        }
    );
}

У меня вопрос: как мне обновить серию[0].pointStart после инициализации диаграммы?


person Pablo Abdelhay    schedule 15.06.2012    source источник


Ответы (2)


Я бы переосмыслил это. Было бы проще создать точки x, y из вашего ряда значений y вместо использования параметров pointStart и pointInterval.

startDate = Date.UTC(2010, 0, 1);
createData = function(beginDate){
    someData = [];
    for (var i = 0; i < 11; i++){
     someData.push([beginDate + (3600 * 1000 * 24 * i), Math.random() * 100]);
    }
    return someData;
}

....

series: [{
        data: createData(startDate)
    }]

Затем в вашей функции:

 nextDay = function(){
    startDate += 3600 * 1000 * 24;        
    chart.series[0].setData(createData(startDate), true);
 }

Рабочая скрипка здесь.

person Mark    schedule 17.06.2012
comment
Эй, Марк, спасибо за ответ. Кажется, ваш способ лучше всего подходит для этого. - person Pablo Abdelhay; 16.08.2012

Я думаю, это то, что вы ищете

 chart.xAxis[0].setCategories();

см. также рабочий jsFiddle

person Mina Gabriel    schedule 16.06.2012
comment
Большое спасибо! Использование категорий было моим решением изменить значения pointStarts на текст - person Fernando Torres; 26.03.2017