Highcharts-redraw()与新的Highcharts.chart


78

我正在努力了解更新highcharts图表的正确方法。假设我绘制了一个图表,然后以某种方式进行更新。例如,我可能想更改数据系列的值,或者我可能要启用dataLabels。

目前,我唯一能弄清楚该怎么做的方法是更改​​图表选项,并使用new Highcharts.chart告诉高图重绘。

但是,我想知道这是否过大,是否有可能“原位”更改图表,而不必从头开始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/

[编辑]:

对于任何对此问题的未来查看者来说,值得注意的是没有隐藏和显示dataLabels的方法。下面显示了如何执行此操作:http : //jsfiddle.net/supertrue/tCF8Y/


4
显示/隐藏dataLabels示例的链接需要更新其HighCharts源URL(它是404ing),并且需要更新jQuery。我已经在jsfiddle.net/supertrue/tCF8Y中
2014年

Answers:


81

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

setData方法本身将调用redraw方法


1
它不会更新工具提示,在鼠标悬停时工具提示仅显示旧数据
Saurabh Sinha

多个系列的更新大约需要13-15秒的时间
Aatif Bandey


也可以在HighMaps中使用-使用Angular的示例代码this.map.series [0] .setData(changes.options.currentValue.series [0] .data,true)
danday74

12

您必须先调用set并在图表对象上添加函数,然后才能调用重绘。

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

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

chart.redraw();

它对我有效。当您在单个页面上使用大量数据的图表时,这是更新图表的一种更好的方法。为每个系列调用redraw可能会使浏览器崩溃。
Ritesh

我正在实时应用程序上,我想更新高图,但是如果更新频率增加,它会崩溃。
Dipak Telangre '18

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()。首先,您需要确保已将图表实例分配给chart变量,这样它才能采用访问和操作图表所需的所有属性和方法。

我还使用了setData()的第二个参数并将其设置为false,以防止自动呈现图表。这是因为我有多个数据系列,所以我宁愿使用render = false更新每个数据系列,然后运行chart.redraw()。这种性能成倍增长(我拥有10,000-100,000个数据点,并且每50毫秒刷新一次数据集)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.