Highcharts-перерисовка() против новых Highcharts.таблица
Я изо всех сил пытаюсь понять правильный способ обновления диаграммы highcharts. Предположим, я отрисовал диаграмму, а затем я хочу ее каким-то образом обновить. Например, я могу захотеть изменить значения ряда данных или включить метки данных.
на данный момент единственный способ, которым я могу понять, как это сделать, - это изменить параметры диаграммы и использовать new Highcharts.chart чтобы сказать highcharts перерисовать.
однако мне интересно, может ли это быть излишним, и это возможно, можно изменить диаграмму "на месте", не начиная с нуля с 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();
});
[edit]:
для будущих зрителей этот вопрос, стоит отметить, что нет способа скрыть и показать метки данных. Ниже показано, как это сделать:http://jsfiddle.net/supertrue/tCF8Y/
4 ответов:
нужно позвонить set и добавить функции на объекте диаграммы перед вызовом redraw.
chart.xAxis[0].setCategories([2,4,5,6,7], false); chart.addSeries({ name: "acx", data: [4,5,6,7,8] }, false); chart.redraw();
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();)
@RobinL как упоминалось в предыдущих комментариях, вы можете использовать диаграмму.серия[n].setData (). Сначала вам нужно убедиться, что вы назначили экземпляр диаграммы переменной диаграммы, таким образом, он принимает все свойства и методы, необходимые для доступа к диаграмме и управления ею.
Я также использовал второй параметр setData () и имел его false, чтобы предотвратить автоматическую визуализацию диаграммы. Это было потому, что у меня есть несколько рядов данных, поэтому я скорее обновлю каждый из них, с помощью render=false, а затем запуск диаграммы.перерисовывать.)( Это умноженная производительность (у меня есть 10 000-100 000 точек данных и обновление набора данных каждые 50 миллисекунд).
Comments