javascriptangularjschartschart.jsangular-chart

How to have solid colored bars in angular-chart bar chart


I'm using angular-chart (based on chart.js) to create some bar charts and am having trouble getting the bar styling I want. I want the bars to be solid colors like this:

Desired Result

But I can't figure out how to get rid of the alpha that chart.js adds by default:

Actual Result

My html looks like this:

  <body ng-app="myApp" ng-controller="myController as ctrl">
    <canvas id="outreach" class="chart chart-bar" 
        chart-labels="ctrl.socialChart.labels" 
        chart-data="ctrl.socialChart.data" 
        chart-series="ctrl.socialChart.series"
        chart-colors="ctrl.socialChart.colors"
        chart-options="ctrl.socialChart.options"></canvas>      
  </body>

And the javascript:

angular.module('myApp', ['chart.js'])

    .controller('myController', [function() {
        var ctrl = this;

        ctrl.socialChart = {
            options: {
                legend: {
                    display: true
                }
            },
            labels: ['2012'],
            series: ['FACEBOOK', 'GOOGLE', 'TWITTER', 'INSTAGRAM'],
            // colors: ['rgba(237, 64, 42, 1)', 'rgba(240, 171, 5, 1)', 'rgba(160, 180, 33, 1)', 'rgba(0, 163, 159, 1)'],
            colors: ['#ED402A', '#F0AB05', '#A0B421', '#00A39F'],
            data: [[1178], [652], [1004], [838]]
        }
    }]);

Here's a Plunker demonstrating it: Plunker

I've found lots of information about using rgba notation (which for some reason gives me the wrong colors altogether) and fillColor (which I can't get working at all). It's hard to tell what info is for version 1 or 2 of chart.js.

Any help would be appreciated.


Solution

  • You can use chart-dataset-override="datasetOverride"

    HTML

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

    Controller

      ctrl.datasetOverride = [{
            fill: true,
            backgroundColor: [
              "#ED402A",
              "#36A2EB",
              "#FFCE56"
            ]
          }, {
            fill: true,
            backgroundColor: [
              "#F0AB05",
              "#36A2EB",
              "#FFCE56"
            ]
          }, {
            fill: true,
            backgroundColor: [
              "#A0B421",
              "#36A2EB",
              "#FFCE56"
            ]
          }, {
            fill: true,
            backgroundColor: [
              "#00A39F",
              "#36A2EB",
              "#FFCE56"
            ]
          },
        ];
    

    DEMO