根据百分比在X范围栏中添加不同的颜色

时间:2018-07-22 21:59:04

标签: highcharts colors xrange

我想根据部分填充为栏的各个部分添加不同的颜色。

当部分填充为0.5(50%)时,它会使条形的一半变为深绿色。有没有一种方法可以根据百分比来定义条形中的颜色?

例如 0-49使部分填充变为红色,其余部分变为白色。 50-100使部分填充变为绿色,其余部分变为白色 等

https://jsfiddle.net/sg0co5au/11/

Highcharts.chart('container', {
    chart: {
        type: 'xrange'
    },
    title: {
        text: 'Highcharts X-range'
    },
    xAxis: {
        type: 'datetime'
    },
    yAxis: {
        title: {
            text: ''
        },
        categories: ['Prototyping', 'Development', 'Testing'],
        reversed: true
    },
    series: [{
        name: 'Project 1',
        // pointPadding: 0,
        // groupPadding: 0,
        borderColor: 'gray',
        pointWidth: 20,
        colour:'#FF0000',
        data: [{
            x: Date.UTC(2014, 10, 21),
            x2: Date.UTC(2014, 11, 2),
            y: 0,
            partialFill: 0.50,
            color:'#469E5A'
        }, 
        ],
        dataLabels: {
            enabled: true
        }
    }]

});

2 个答案:

答案 0 :(得分:0)

我看到背景矩形属于"highcharts-point highcharts-color-0 highcharts-partfill-original"类,填充值为#469E5A。将其更改为"white",直到您定义其CSS的位置。

上面的叠加层是 <rect x="6.5" y="85.5" width="696" height="20" rx="3" ry="3" class="highcharts-partfill-overlay" clip-path="url(#highcharts-51rfx2r-4)" stroke="gray" stroke-width="1" fill="rgb(0,82,14)"></rect>

对于百分比颜色,请使用变量来存储百分比,例如percent

if(percent<=49){
    document.getElementsByClassName("highcharts-partfill-overlay").setAttribute("fill", "red")
}
else if(percent>49){
    document.getElementsByClassName("highcharts-partfill-overlay").setAttribute("fill", "green")
}

您可以使用document.getElementsbyClassName()

来类似地更改背景框的颜色

答案 1 :(得分:0)

是的,您可以通过检查填充的条形来设置图表加载后的填充颜色。

首先,将图表选项设置为变量,以便稍后使用它们

var thisChart = Highcharts.chart('container', { /* your options here */ });

接下来,在图表加载之后,检查填充是否低于或高于50(在这种情况下,填充为0.5以匹配您在partialFill中设置的值),然后使用series.update()函数(https://api.highcharts.com/class-reference/Highcharts.Series#update)来更改颜色:

if (thisChart.series[0].data[0].partialFill < 0.5) {
  thisChart.series[0].update({
    partialFill: {
      fill: 'red'
    }
  });
} else {
  thisChart.series[0].update({
    partialFill: {
      fill: '#469E5A'
    }
  });
}

我对您的代码做了一些小的更改。首先,我将fill系列的颜色显式设置为您选择的绿色。然后,我将您的数据颜色设置为白色。这是将部分填充的颜色设置为系列的颜色,而其他空间的颜色设置为白色。然后,在绘制图表后检查partialFill值时,如果该值小于0.5,则填充的值将改为红色。

  series: [{
    name: 'Project 1',
    borderColor: 'gray',
    pointWidth: 20,
    partialFill: {
      fill:'#469E5A' /* default color of the filled part of the bar */
    },
    data: [{
      x: Date.UTC(2014, 10, 21),
      x2: Date.UTC(2014, 11, 2),
      y: 0,
      partialFill: 0.50,
      color: 'white' /* color of the unfilled part of the bar */
    }],
    dataLabels: {
      enabled: true
    }
  }]

在此处查看您的提琴的更新版本:https://jsfiddle.net/brightmatrix/sg0co5au/46/

我希望这些信息对您有所帮助。