Различный цвет для каждого столбца в угловой-гистограмме 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 этот ответ