【问题标题】:Highcharts: Updating a Pie Chart with setData()Highcharts:使用 setData() 更新饼图
【发布时间】:2018-04-10 17:20:37
【问题描述】:

我正在尝试研究如何更新 Highcharts 饼图,但在我的一生中似乎无法让它正常工作。

我已经查看了文档,并且已经能够获得条形图、折线图和样条图以正常更新,但是当将此功能用于饼图时,它就不起作用了。

我目前正在喂食:

item.setData([["none", 100]], true);

其中 item 等于系列,如下所示:

$.each(browser_chart.series, function(i, item){
    if(item.name == 'Browser share'){
        console.log(data.browsers);
        item.setData([["none", 100]], true);
    }
});

演示中显示的是饼图数据的格式。问题是它似乎无法正确阅读该系列。我试试:

item.setData([\"none\", 100], true);

它似乎做了一些事情,但无法正确读取 x 和 y 值(这当然意味着它是错误的)。

这里有人可以为我指明方向吗?

谢谢,

【问题讨论】:

    标签: json highcharts


    【解决方案1】:

    已编辑:
    在这种情况下,当您设置新数据时,您必须为所有饼图部分设置数组数组。
    在我的Example 中,我有六个类别,所以我必须为所有类别设置数据。

    因此,在这种情况下,您必须执行以下操作:

    var seriesData = [];
    $.each(browser_chart.series, function(i, item) {
        if(item.name == 'Browser share'){
            seriesData.push(["serie"+i, someNumber]);
        }
    });
    chart.series[0].setData(seriesData, true);
    

    【讨论】:

    • 嗯,这不起作用,但你的例子确实告诉了我原因。当我更新饼图时,我实际上错过了系列中的点,因为某些浏览器没有我用户选择的日期范围的值。似乎当我更新的点数少于最初的点数时,它似乎无法正确更新并引发严重错误。你知道吗?
    • 我已经能够通过使用新的 Highcharts.Chart() 重新制作饼图来处理不同的点,但它有点难看,这是唯一的方法吗?你知道吗?
    【解决方案2】:

    我已经标记了 Ricardos 的回答,但是我的问题涉及的内容有点多,我没有正确解释。

    我正在通过 AJAX 从 PHP 后端生成的 JSON 更新饼图。当我将新数据应用于饼图时,它会中断。

    使用 Ricardos 的答案,我发现这是因为我的点数不同,所以我不能只更新饼图,我必须像这样重新制作它:

    browser_chart_config.series[0].data = data.browsers;
    browser_chart = new Highcharts.Chart(browser_chart_config);
    

    这将允许您在点数不同时更新图表。

    希望对你有帮助,

    编辑:我还发现这是 HighCharts 的一个已知问题:https://github.com/highslide-software/highcharts.com/issues/542

    【讨论】:

    • 它仅在您设置所有系列数据时才有效,因此在您的情况下,您必须销毁图表并再次执行此操作。 ://
    【解决方案3】:

     //initialise
            var new_data;
                new_data = [{ name: 'load percentage', y: 10.0, color: '#b2c831' },{ name: 'rest', y: 60.0, color: '#3d3d3d' }];
    	function requestData() 
            {             
    			$.ajax({
    				url: 'live-server-data.php', 
    				success: function(point) 
                                    {
    					var series = chart.series[0];
                                            var y_val = parseInt(point[1]);                                      
                                            var x_val = 100 - y_val;
                                            console.log(point[0]+ "," +point[1] );//["0"]
                                            new_data = [{ name: 'load percentage', y:y_val, color: '#b2c831' },{ name: 'rest', y:x_val, color: '#3d3d3d' }];                                                                
                                            series.setData(new_data);                                   
                                            // call it again after one second					
    				},
    				cache: false
    			});
    	}
    			

    【讨论】:

    • 您应该添加对您提出的解决方案的描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多