Skip to content

Commit 55bfe6b

Browse files
committed
feat: choose colors by chart type
1 parent 1901efe commit 55bfe6b

File tree

17 files changed

+162
-27
lines changed

17 files changed

+162
-27
lines changed

src/plugins/plugin.colors.ts

Lines changed: 53 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
1-
import {Chart} from '../types';
1+
import type {Chart, ChartDataset} from '../types';
2+
3+
type DatasetColorizer = (dataset: ChartDataset, i: number) => void;
24

35
const BORDER_COLORS = [
4-
'#36A2EB', // blue
5-
'#FF6384', // red
6-
'#4BC0C0', // green
7-
'#FF9F40', // orange
8-
'#9966FF', // purple
9-
'#FFCD56', // yellow
10-
'#C9CBCF', // grey
6+
'rgb(54, 162, 235)', // blue
7+
'rgb(255, 99, 132)', // red
8+
'rgb(255, 159, 64)', // orange
9+
'rgb(255, 205, 86)', // yellow
10+
'rgb(75, 192, 192)', // green
11+
'rgb(153, 102, 255)', // purple
12+
'rgb(201, 203, 207)' // grey
1113
];
1214

13-
// Primary colors with 50% transparency, mixed with white
14-
const BACKGROUND_COLORS = [
15-
'#9BD0F5', // blue
16-
'#FFB1C1', // red
17-
'#A5DFDF', // green
18-
'#FFCF9F', // orange
19-
'#CCB3FF', // purple
20-
'#FFE6AA', // yellow
21-
'#E4E5E7', // grey
22-
];
15+
// Primary colors with 50% transparency
16+
const BACKGROUND_COLORS = BORDER_COLORS.map(_ => _.replace(')', ', 0.5)'));
2317

2418
function getBorderColor(i: number) {
2519
return BORDER_COLORS[i % BORDER_COLORS.length];
@@ -29,18 +23,50 @@ function getBackgroundColor(i: number) {
2923
return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];
3024
}
3125

26+
function createDefaultDatasetColorizer() {
27+
return (dataset: ChartDataset, i: number) => {
28+
if (!dataset.borderColor && !dataset.backgroundColor) {
29+
dataset.borderColor = getBorderColor(i);
30+
dataset.backgroundColor = getBackgroundColor(i);
31+
}
32+
};
33+
}
34+
35+
function createDoughnutDatasetColorizer() {
36+
let i = 0;
37+
38+
return (dataset: ChartDataset) => {
39+
if (!dataset.borderColor && !dataset.backgroundColor) {
40+
dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));
41+
}
42+
};
43+
}
44+
45+
function createPolarAreaDatasetColorizer() {
46+
let i = 0;
47+
48+
return (dataset: ChartDataset) => {
49+
if (!dataset.borderColor && !dataset.backgroundColor) {
50+
dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));
51+
}
52+
};
53+
}
54+
3255
export default {
3356
id: 'colors',
3457

3558
beforeLayout(chart: Chart) {
36-
chart.data.datasets.forEach((dataset, i) => {
37-
if (!dataset.borderColor) {
38-
dataset.borderColor = getBorderColor(i);
39-
}
40-
41-
if (!dataset.backgroundColor) {
42-
dataset.backgroundColor = getBackgroundColor(i);
43-
}
44-
});
59+
const {type} = chart.config;
60+
let colorizer: DatasetColorizer;
61+
62+
if (type === 'doughnut') {
63+
colorizer = createDoughnutDatasetColorizer();
64+
} else if (type === 'polarArea') {
65+
colorizer = createPolarAreaDatasetColorizer();
66+
} else {
67+
colorizer = createDefaultDatasetColorizer();
68+
}
69+
70+
chart.data.datasets.forEach(colorizer);
4571
},
4672
};

test/fixtures/plugin.colors/bar.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module.exports = {
2+
config: {
3+
type: 'bar',
4+
data: {
5+
labels: [0, 1, 2, 3, 4, 5],
6+
datasets: [
7+
{
8+
data: [0, 5, 10, null, -10, -5],
9+
},
10+
{
11+
data: [10, 2, 3, null, 10, 5]
12+
}
13+
]
14+
}
15+
}
16+
};
21.1 KB
Loading
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = {
2+
config: {
3+
type: 'bubble',
4+
data: {
5+
datasets: [{
6+
data: [{x: 12, y: 54, r: 22.4}]
7+
}, {
8+
data: [{x: 18, y: 38, r: 25}]
9+
}]
10+
}
11+
}
12+
};
24.1 KB
Loading
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module.exports = {
2+
config: {
3+
type: 'doughnut',
4+
data: {
5+
datasets: [
6+
{
7+
data: [0, 2, 4, null, 6, 8]
8+
},
9+
{
10+
data: [5, 1, 6, 2, null, 9]
11+
}
12+
]
13+
}
14+
}
15+
};
49.7 KB
Loading
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module.exports = {
2+
config: {
3+
type: 'line',
4+
data: {
5+
labels: [0, 1, 2, 3, 4, 5],
6+
datasets: [
7+
{
8+
data: [0, 5, 10, null, -10, -5],
9+
},
10+
{
11+
data: [10, 2, 3, null, 10, 5]
12+
}
13+
]
14+
}
15+
}
16+
};
32.9 KB
Loading
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module.exports = {
2+
config: {
3+
type: 'polarArea',
4+
data: {
5+
labels: [0, 1, 2, 3, 4, 5],
6+
datasets: [
7+
{
8+
data: [0, 2, 4, null, 6, 8]
9+
}
10+
]
11+
}
12+
}
13+
};

0 commit comments

Comments
 (0)