javascript - 如何为 angular-chart.js 中的每个栏设置不同的颜色?

标签 javascript angularjs charts bar-chart

我看过How to change colours for Angular-Chart.js ,但它与整个(数据集)的颜色有关,而不是特定条形。

我正在寻找的是一种应用 Different color for each bar in a bar chart; ChartJS 的方法到 Angular。

所以,我有一个条形图:

<canvas id="locationBar" class="chart chart-bar" data="chartParams.votes" labels="chartParams.listOfLocations" series="chartParams.series" colours="chartParams.colours" options="chartParams.options"></canvas> 

使用以下 Angular 代码(当然在 Controller 中)

$scope.chartParams = {
    listOfLocations: ['Trenzalore','Earth','Caprica','Sol','Tau Ceti'],
    votes: [[5,10,6,7,2]],
    series: ["Nice Places"],
    colours: [{fillColor:getRandomColour()}],
    options: {barShowStroke : false}
};

其中 getRandomColour() 将返回随机颜色。

现在,colours 字段将此颜色应用于所有条形:

same colour :( different colours

当我真的想为每个栏使用不同的颜色时:

Plunker

最佳答案

使用最新版本的angular-chart.js ,这是一个根据条件更改颜色的示例,而不修改库本身。相反,它使用 chart-dataset-override 功能。

诀窍是使用只有一个数据集的系列。

HTML

<div ng-controller="chartControl">
  <canvas id="bar" class="chart chart-bar" 
    chart-data="goal.data" 
    chart-labels="goal.labels" 
    chart-options="goal.options" 
    chart-series="goal.series" 
    chart-dataset-override="goal.datasetOverride"></canvas>
</div>

JavaScript

在 Controller 中添加如下代码:

  var exceeded = '#27ae60';
  var achieved = '#bdc3c7';
  var defeated = '#e74c3c';

  $scope.goal = [];
  $scope.goal.goal = 3;

  $scope.goal.series = [ 'Visits' ];
  $scope.goal.labels = [
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'
  ];
  $scope.goal.data = [
    [5, 2, 3, 3, 3, 4, 2, 3, 4],
  ];

  var backgroundColours = [];

  // Assign the background colour based on whether the goal was achieved.
  for( var i = 0; i < $scope.goal.data[0].length; i++ ) {
    var v = $scope.goal.data[0][i];

    if( v > $scope.goal.goal ) {
      backgroundColours[i] = exceeded;
    }
    else if( v < $scope.goal.goal ) {
      backgroundColours[i] = defeated;
    }
    else {
      backgroundColours[i] = achieved;
    }
  } 

  // Create a place to hold the background colours.
  $scope.goal.datasetOverride = [{ backgroundColor: [] }];

  // Assign the colours to the pre-populated array.
  $scope.goal.datasetOverride[0].backgroundColor = backgroundColours;

  $scope.goal.options = {
    barShowStroke: false,
    scales: {
      yAxes: [{
        ticks: {
          min: 0,
          max: 7,
          stepSize: 1
        }
      }]
    }
  };

输出

产生:

Chart Output

相关链接

关于javascript - 如何为 angular-chart.js 中的每个栏设置不同的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29999963/

相关文章:

javascript - Highcharts 在单行中渲染折线图

javascript - Highstock 视觉失真多个图表

JavaScript 总是返回 true

javascript - AngularJS 待办事项列表应用程序 - 正在添加到列表而无需输入文本

javascript - 使用 GoJS initialAutoscale 图属性时遇到问题 - 它是如何工作的?

angularjs - 用于大型项目的 Angular 2 或 NodeJs/Express

javascript - 如何使用 ng-repeat 使用对象数组内的属性来重复行

android - 音频播放和暂停Ionic Creator应用程序(音频流-广播应用程序)

javascript - 使用次要和主要刻度 d3js 创建波德图

javascript - Jquery 1.10.2 跨域请求