Highcharts - перемальовування () проти нового Highcharts.chart


78

Я намагаюся зрозуміти правильний спосіб оновлення діаграми високих діаграм. Припустимо, я зробив діаграму, а потім хочу її якимось чином оновити. Наприклад, я можу захотіти змінити значення ряду даних, або я можу включити dataLabels.

На даний момент єдиний спосіб, як я можу зрозуміти, як це зробити, - це змінити параметри діаграми і використовувати, new Highcharts.chartщоб сказати хайчартам перемалювати.

Однак мені цікаво, чи це може бути надмірним, і чи можливо змінити діаграму "in situ", не починаючи з нуля new Highcharts.chart. Я помічаю, що існує redraw()метод, але, здається, я не можу змусити його працювати.

Будь-яка допомога дуже вдячна.

Дякую,

Робін

Зразок коду такий, а внизу є jsFiddle

$(document).ready(function() {

chartOptions = {
    chart: {
        renderTo: 'container',
        type: 'area',
    },
    series: [{
        data: [1,2,3]
    }]
};

chart1 = new Highcharts.Chart(chartOptions);


chartOptions.series[0].data= [10,5,2];
chart1 = new Highcharts.Chart(chartOptions);

//The following seems to have no effect
chart1.series[0].data = [2,4,4];
chart1.redraw();

});​

http://jsfiddle.net/sUXsu/18/

[редагувати]:

Для будь-яких майбутніх глядачів цього питання варто зазначити, що не існує методу приховування та відображення ярликів даних. Далі показано, як це зробити: http://jsfiddle.net/supertrue/tCF8Y/


4
Посилання на ваш приклад show / hide dataLabels потребувало оновлення вихідної URL-адреси HighCharts (воно було 404-річним), а jQuery потрібно оновити. Я зробив це в jsfiddle.net/supertrue/tCF8Y
supertrue

Відповіді:


81

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

Сам setDataметод буде викликати метод перемальовування


1
його не оновлюється підказка, на підказці наведення курсора відображаються лише старі дані
Saurabh Sinha

для оновлення кількох серій потрібно близько 13-15 секунд часу
Аатіф Банді

1
Для отримання додаткової інформації: api.highcharts.com/class-reference/…
Нгуєн Тран

працює і в HighMaps - приклад коду за допомогою Angular this.map.series [0] .setData (changes.options.currentValue.series [0] .data, true)
danday74

12

перед викликом перемальовування потрібно викликати набір і додавати функції об’єкта діаграми.

chart.xAxis[0].setCategories([2,4,5,6,7], false);

chart.addSeries({
    name: "acx",
    data: [4,5,6,7,8]
}, false);

chart.redraw();

Це працює для мене, дякую .. !! Це кращий спосіб оновити діаграму, коли ви працюєте з великою кількістю діаграм з великою кількістю даних на одній сторінці. Виклик перемальовування для кожної серії може призвести до збою браузерів.
Ritesh

Я працюю над додатком у режимі реального часу, і я хочу оновити високу карту, але її браузер, що аварійно завершує роботу, якщо частота оновлення зросте.
Діпак Телангре

10
var newData = [1,2,3,4,5,6,7];
var chart = $('#chartjs').highcharts();
chart.series[0].setData(newData, true);

Пояснення:
Змінна newDataмістить значення, яке потрібно оновити на діаграмі. Змінна chart- це об’єкт діаграми.setData- це метод, який надає highchart для оновлення даних.

Метод setData містить два параметри, у першому параметрі нам потрібно передати нове значення як масив, а другий параметр - це логічне значення. Якщо trueтоді діаграма оновлюється сама, а якщо falseтоді, нам доведеться використовувати redraw()метод для оновлення діаграми (тобто chart.redraw();)

http://jsfiddle.net/NxEnH/8/


0

@RobinL, як згадувалося в попередніх коментарях, ви можете використовувати chart.series [n] .setData (). Спочатку потрібно переконатись, що ви призначили екземпляр діаграми змінній діаграми, таким чином вона приймає всі властивості та методи, необхідні для доступу та маніпулювання діаграмою.

Я також використовував другий параметр setData () і мав його значення false, щоб запобігти автоматичному отрисуванню діаграми. Це було тому, що у мене є кілька серій даних, тому я скоріше оновлю кожну з них за допомогою render = false, а потім запускаю chart.redraw (). Ця примножена продуктивність (я маю 10000-100000 точок даних і оновлюю набір даних кожні 50 мілісекунд).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.