Как изменить цвета для Angular-Chart.js
Я использую Angular-Chart.js (версия AngularJS Chart.js) для создания гистограммы. Диаграмма работает с параметрами, кроме цветов.
Даже если я их установлю, это указано в документации, они остаются серыми.
<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 ответов
Ваш должен объявить 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)'
}];
Для получения дополнительной информации см. Этот пост / это тоже.
Для более новых версий смотрите ответ eli0tt, так как имена параметров изменились.
У меня были такие же трудности. В документах говорится, что нужно использовать "цвета", однако, как только я обновил свой HTML до:
chart-colours
с угловым массивом:
$scope.colours = ['#72C02C', '#3498DB', '#717984', '#F1C40F'];
Это сработало!
Кажется, что имя снова изменилось. Я использую angular-chart.js 1.0.3 и управление цветом для гистограмм работает так:
colors:[{
backgroundColor:"#F00",
hoverBackgroundColor:"#FF0",
borderColor:"#0F0",
hoverBorderColor:"#00F"
}];
В теге canvas имя атрибута - цвета диаграммы
Как сказал @pankajparkar. Просто добавив, что вы также можете передать html color s, и angular-chart.js определит объекты цвета в rgba с соответствующими нюансами, например $scope.colors = ['#FD1F5E','#1EF9A1','#7FFD1F','#68F000'];
По состоянию на 2017 год я получил угловые диаграммы для работы со следующим кодом.
что имена элементов изменены. Взято из исходного кода угловой диаграммы.
Кроме того, как только вы исчерпали цвета, angular-chart сгенерирует их для вас. Это включает непрозрачность 0,2 для цветов фона.
Если вы укажете #hex, будет добавлена непрозрачность цветов.
Спецификация цвета через глобальный.
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)
};
}
Вы хотели сказать: "цвета"
$scope.colours = ['#FD1F5E','#1EF9A1','#7FFD1F','#68F000'];
Также мы можем видеть другие атрибуты, которые мы можем изменить, такие как: легенда, серия, наведение. Рядом с каждым графиком вы можете увидеть опцию "настройки", это все, что вы можете изменить.
С последней версией $scope.colors, похоже, не работает. Вам нужно использовать chart-dataset-override="colors"
DEMO
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)'
}];
});
<!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>