如果您想在图表中为每个条形图设置不同的颜色,您需要将这些值传递给数组。但是,chart.js
不支持此类功能。
原因
我们能够在条形图区域看到的颜色实际上就是fillColor
选项,如果您查看chart.js的源代码Line
代码
helpers.each(dataset.data, function(dataPoint, index) {
datasetObject.bars.push(new this.BarClass({
value: dataPoint,
label: data.labels[index],
datasetLabel: dataset.label,
strokeColor: dataset.strokeColor,
fillColor: dataset.fillColor,
highlightFill: dataset.highlightFill || dataset.fillColor,
highlightStroke: dataset.highlightStroke || dataset.strokeColor
}));
}, this);
上述代码清楚地表明了
fillColor
需要一个字符串。无论如何,您只能在该字符串中传递一种颜色。并且只有一种颜色将应用于条形图系列。如果我们想使您的要求可行,则需要对
chart.js
进行更改。
chart.js中需要进行的更改
我们需要更改此行,从fillColor: dataset.fillColor,
更改为fillColor: dataset.fillColor[index],
,以便我们可以传递需要应用于图表每个条形的颜色数组。 .each
的index
变量将确保按照我们在数组中给定的顺序应用颜色于条形上。我们的颜色将更改为$scope.medals_colours = [{fillColor:['#087D76', '#B3BC3A', '#38B665', '#8B4A9D']}];
.
更改后的代码
helpers.each(dataset.data, function(dataPoint, index) {
datasetObject.bars.push(new this.BarClass({
value: dataPoint,
label: data.labels[index],
datasetLabel: dataset.label,
strokeColor: dataset.strokeColor,
fillColor: dataset.fillColor[index] || dataset.fillColor,
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']];
});
我知道这看起来很hacky,但我们必须这样做。
赞赏@tpie的努力
这个答案
Demo Plunkr演示。