Различный цвет для каждого столбца в угловой-гистограмме chartjs

Я использую angular-chartJS в проекте, над которым я работаю, и мне нужен другой цвет для каждого бара в гистограмме.

холст:

<canvas id="bar" class="chart chart-bar" data="medal_data" labels="medal_ticks"></canvas>

1 ответов


как вы хотите, чтобы дать другой цвет для каждого бара в графике, вы передаете эти значения в массиве. Но дело в том ... --4--> не поддерживает такой функции.

причина

цвет, который мы можем видеть в области бара, не что иное, как , если вы посмотрите на исходный код диаграмма.js строка

код

helpers.each(dataset.data, function(dataPoint, index) {
    //Add a new point for each piece of data, passing any required data to draw.
    datasetObject.bars.push(new this.BarClass({
        value: dataPoint,
        label: data.labels[index],
        datasetLabel: dataset.label,
        strokeColor: dataset.strokeColor,
        fillColor: dataset.fillColor, //<--This line responsible for filling color
        highlightFill: dataset.highlightFill || dataset.fillColor,
        highlightStroke: dataset.highlightStroke || dataset.strokeColor
    }));
}, this);

выше код ясно говорит, что fillColor требуются строку. В любом случае вы можете передать только один цвет в этой строке. И только один цвет получит прикладной к серии адвокатского сословия. Если мы хотим сделать ваше требование выполнимым, нам нужно внести изменения в chart.js.

изменения, которые будут внесены в диаграмму.js

нужно внести изменения в эта строка С fillColor: dataset.fillColor, to fillColor: dataset.fillColor[index], так, что мы сможем пройти массив цвета которому нужно быть приложенным на каждом баре диаграммы. index переменной .each будет гарантировать, что цвет будет применяться на панели в порядке, который мы дали в массиве. Наш цвет будет изменен на $scope.medals_colours = [{fillColor:['#087D76', '#B3BC3A', '#38B665', '#8B4A9D']}];.

изменить код

helpers.each(dataset.data, function(dataPoint, index) {
    //Add a new point for each piece of data, passing any required data to draw.
    datasetObject.bars.push(new this.BarClass({
        value: dataPoint,
        label: data.labels[index],
        datasetLabel: dataset.label,
        strokeColor: dataset.strokeColor,
        fillColor: dataset.fillColor[index] || dataset.fillColor, //<--getting color using index
        highlightFill: dataset.highlightFill || dataset.fillColor,
        highlightStroke: dataset.highlightStroke || dataset.strokeColor
    }));
}, this);

разметки

  <div class="graph-display" ng-controller="jsonServerBox">
    <canvas id="bar" class="chart chart-bar" data="medal_data" labels="medal_ticks" 
    colours="medals_colours"></canvas>
  </div>

контроллер

  app.controller('jsonServerBox', function($scope) {

    $scope.medal_ticks = ['Gold', 'Silver', 'Bronze', 'Not passed'];
    $scope.series = ['Medaljer'];
    $scope.medals_colours = [{fillColor:['#087D76', '#B3BC3A', '#38B665', '#8B4A9D']}];

    $scope.medal_data = [['1', '5', '2', '0']];
  });

Я знаю, что это выглядит суховато, но мы должны сделать это.

престижность идет @tpie этот ответ

Demo Plunkr