如何更改Angular-Chart.js的颜色

时间:2015-02-21 15:30:13

标签: javascript angularjs charts bar-chart chart.js

我使用Angular-Chart.js(AngularJS Chart.js版本)来创建条形图。图表正在使用除颜色之外的选项。

即使我设置了in the documentation,它们也会保持灰色。

<div class="graph-display" ng-controller="chartController">
    <canvas class="chart chart-bar"
    data="bilans.data"
    labels="bilans.labels"
    series="bilans.series"
    options="{
        scaleShowHorizontalLines: true,
        scaleShowVerticalLines: false,
        tooltipTemplate: '<%= value %> $',
        responsive: true
    }"
    colours="{
    fillColor: 'rgba(47, 132, 71, 0.8)',
    strokeColor: 'rgba(47, 132, 71, 0.8)',
    highlightFill: 'rgba(47, 132, 71, 0.8)',
    highlightStroke: 'rgba(47, 132, 71, 0.8)'
    }"
    ></canvas>
</div>

实际上,选项正在运行但颜色却没有。我做错了吗?

7 个答案:

答案 0 :(得分:45)

您应该将colours对象声明为数组

"colours": [{
    fillColor: 'rgba(47, 132, 71, 0.8)',
    strokeColor: 'rgba(47, 132, 71, 0.8)',
    highlightFill: 'rgba(47, 132, 71, 0.8)',
    highlightStroke: 'rgba(47, 132, 71, 0.8)'
}];

Working Plunkr

有关详细信息,请参阅this post / this


对于较新版本,请参阅eli0tt's answer,因为参数名称已更改。

答案 1 :(得分:12)

我遇到了同样的困难。在文档中,它说要使用&#34; colors&#34;但是,一旦我将我的html更新为:

chart-colours

,角度数组为:

$scope.colours = ['#72C02C', '#3498DB', '#717984', '#F1C40F'];

有效!

答案 2 :(得分:7)

正如@pankajparkar所说。只需添加你也可以传递html颜色和angular-chart.js将在rgba中正确定义颜色对象,具有适当的细微差别,例如: $scope.colors = ['#FD1F5E','#1EF9A1','#7FFD1F','#68F000'];

答案 3 :(得分:7)

似乎命名再次改变了。我使用 angular-chart.js 1.0.3 ,条形图的颜色管理如下:

colors:[{
      backgroundColor:"#F00",
      hoverBackgroundColor:"#FF0",
      borderColor:"#0F0",
      hoverBorderColor:"#00F"
}];

在canvas标签中,属性的名称为 chart-colors

答案 4 :(得分:6)

截至2017年,我使用角度图表来处理以下代码。

  1. 更改了元素的名称。取自角图表源代码。

  2. 另外,只要颜色用完,angular-chart就会为你生成它们。这包括背景颜色的不透明度为0.2。

  3. 如果指定#hex颜色,则会添加不透明度。

  4. 通过全球的颜色规范。

    app.config(['ChartJsProvider', function (ChartJsProvider) {
    
    // Using ChartJsProvider.setOptions('bar', { didn't seem to work for me.
    // Nor did $scope.chartColors. Although I only tried that in the controller.
    Chart.defaults.global.colors = [
      {
        backgroundColor: 'rgba(78, 180, 189, 1)',
        pointBackgroundColor: 'rgba(78, 180, 189, 1)',
        pointHoverBackgroundColor: 'rgba(151,187,205,1)',
        borderColor: 'rgba(0,0,0,0',
        pointBorderColor: '#fff',
        pointHoverBorderColor: 'rgba(151,187,205,1)'
      }, {
        backgroundColor: 'rgba(229, 229, 229, 1)',
        pointBackgroundColor: 'rgba(229, 229, 229, 1)',
        pointHoverBackgroundColor: 'rgba(151,187,205,1)',
        borderColor: 'rgba(0,0,0,0',
        pointBorderColor: '#fff',
        pointHoverBorderColor: 'rgba(151,187,205,1)'
      }
    ...
    

    在源代码中,当前是颜色选择代码。通过Chart.js选项设置的颜色在这里重置(我没有让它工作)。

    根据angular-chart.js源代码选择颜色:

      var colors = angular.copy(scope.chartColors ||
        ChartJs.getOptions(type).chartColors ||
        Chart.defaults.global.colors
    

    是的,如果您没有指定对象,则会为您设置不透明度。来自angular-chart.js:

    function convertColor (color) {
      if (typeof color === 'object' && color !== null) return color;
      if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));
      return getRandomColor();
    }
    ...
    function getColor (color) {
      return {
        backgroundColor: rgba(color, 0.2),
        pointBackgroundColor: rgba(color, 1),
        pointHoverBackgroundColor: rgba(color, 0.8),
        borderColor: rgba(color, 1),
        pointBorderColor: '#fff',
        pointHoverBorderColor: rgba(color, 1)
      };
    }
    

答案 5 :(得分:2)

你想说:&#34;颜色&#34;

$scope.colours = ['#FD1F5E','#1EF9A1','#7FFD1F','#68F000'];

我们还可以看到我们可以更改的其他属性,例如:图例,系列,悬停。在每个图表旁边,您可以看到一个名为&#34; settings&#34;的选项,这些都是您可以更改的内容。

答案 6 :(得分:0)

使用最新版本$ scope.colors似乎不起作用。您需要使用 chart-dataset-override="colors"

<强>样本

&#13;
&#13;
angular.module("app", ["chart.js"]).controller("DoughnutCtrl", function ($scope) {
  $scope.results = {'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': 0};
  $scope.labels = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
  
  $scope.data = [
    [1, 3, 5, 8, 9, 10, 11, 12, 33, 5]
  ];
  $scope.colors = [{ 
    fillColor: 'rgba(59, 89, 152,0.2)',
    strokeColor: 'rgba(59, 89, 152,1)',
    pointColor: 'rgba(59, 89, 152,1)',
    pointStrokeColor: '#fff',
    pointHighlightFill: '#fff',
    pointHighlightStroke: 'rgba(59, 89, 152,0.8)'
  }];
});
&#13;
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Multi Slot Transclude</title>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.3.0/Chart.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-chart.js/1.0.3/angular-chart.min.js"></script>
</head>
<body ng-app="app" ng-controller="DoughnutCtrl">
  <canvas
        class="chart chart-bar"
        chart-data="data"
        chart-labels="labels"
        chart-dataset-override="colors">
      </canvas>
</body>
</html>
&#13;
&#13;
&#13;