使用HighChart + JSON数据为饼图设置颜色

时间:2016-01-12 06:00:21

标签: javascript highcharts highstock

我正在从以JSON格式存储的数据生成饼图。我试图根据JSON值改变颜色。

Ex:if value @ json [0] ['data'] [0] [0] =“FAILED”// setColor(RED)。

我能够使用options.series.color设置列堆栈图表的颜色,但是当我尝试将此选项与饼图一起使用时,它将数据转换为系列并且无法在容器上呈现图表。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
  function getData(id) {
    $.getJSON("pie.php", {
      id: id
    }, function(json) {
      option.series = json;
      chart = new Highcharts.chart(options);
    });
  }
</script>

我们可以在调用'chart'之前设置getData函数中的颜色,还是需要使用Highcharts.setOptions()并定义颜色代码。

2 个答案:

答案 0 :(得分:3)

更好的选择是根据您的json数据创建系列。这是您根据数据指定颜色的方法。

var serie = {
    data: []
};
var series = [serie];

jQuery.each(jsonData, function(index, pointData) {

    var point = {
        name: pointName,
        y: pointData.Value,
        color: pointData.Value == 'FAILED' ? 'ff0000' : '00ff00',    
        serverData: pointData
    };

    serie.data.push(point);
});
chart.series = series;

OR

看看这个更简单的版本

JSFiddle

$( document ).ready(function() {

var data = [{
    "name": "Tokyo",
    "data": 3.0
}, {
    "name": "NewYork",
    "data": 2.0
}, {
    "name": "Berlin",
    "data": 3.5
}, {
    "name": "London",
    "data": 1.5
}];

    
// Highcharts requires the y option to be set
$.each(data, function (i, point) {
    point.y = point.data;
    point.color = parseFloat(point.data) > 3 ? '#ff0000' : '#00ff00';
});


var chart = new Highcharts.Chart({

    chart: {
        renderTo: 'container',
        type: 'pie'
    },

    series: [{
        data: data
    }]

});
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<div id="container" style="height: 300px"></div>

答案 1 :(得分:0)

我们可以通过setOption函数设置高图自定义颜色,如

Highcharts.setOptions({
  colors: ['#F64A16', '#0ECDFD',]
});

它将颜色设置为我的饼图。

动态3D颜色的另一种解决方案

实际上这个主题选择的定制在这里是

3种颜色设置为颜色变量

var colors = Highcharts.getOptions().colors;
        $.each(colors, function(i, color) {
            colors[i] = {
                linearGradient: { x1: 0, y1: 0, x2: 1, y2: 0 },
                stops: [
                    [0, '#0ECDFD'],
                    [0.3, '#F64A16'],
                    [1, color]
                ]
            };

        });

&安培;直接分配

 {
  type : 'column',
    name : 'bug',
    data : [],
    color : colors,                 
    pointWidth : 28,
}