mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
feat: colors for mixed charts (#10870)
This commit is contained in:
parent
9a9ff6fdbd
commit
22f0dfe9a7
@ -4,8 +4,6 @@ export interface ColorsPluginOptions {
|
||||
enabled?: boolean;
|
||||
}
|
||||
|
||||
type DatasetColorizer = (dataset: ChartDataset, i: number) => void;
|
||||
|
||||
interface ColorsDescriptor {
|
||||
backgroundColor?: unknown;
|
||||
borderColor?: unknown;
|
||||
@ -32,38 +30,41 @@ function getBackgroundColor(i: number) {
|
||||
return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];
|
||||
}
|
||||
|
||||
function createDefaultDatasetColorizer() {
|
||||
return (dataset: ChartDataset, i: number) => {
|
||||
dataset.borderColor = getBorderColor(i);
|
||||
dataset.backgroundColor = getBackgroundColor(i);
|
||||
};
|
||||
function colorizeDefaultDataset(dataset: ChartDataset, i: number) {
|
||||
dataset.borderColor = getBorderColor(i);
|
||||
dataset.backgroundColor = getBackgroundColor(i);
|
||||
|
||||
return ++i;
|
||||
}
|
||||
|
||||
function createDoughnutDatasetColorizer() {
|
||||
function colorizeDoughnutDataset(dataset: ChartDataset, i: number) {
|
||||
dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
function colorizePolarAreaDataset(dataset: ChartDataset, i: number) {
|
||||
dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
function getColorizer(chartType: string) {
|
||||
let i = 0;
|
||||
|
||||
return (dataset: ChartDataset) => {
|
||||
dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));
|
||||
const type = dataset.type || chartType;
|
||||
|
||||
if (type === 'doughnut' || type === 'pie') {
|
||||
i = colorizeDoughnutDataset(dataset, i);
|
||||
} else if (type === 'polarArea') {
|
||||
i = colorizePolarAreaDataset(dataset, i);
|
||||
} else if (type) {
|
||||
i = colorizeDefaultDataset(dataset, i);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function createPolarAreaDatasetColorizer() {
|
||||
let i = 0;
|
||||
|
||||
return (dataset: ChartDataset) => {
|
||||
dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));
|
||||
};
|
||||
}
|
||||
|
||||
function getColorizer(type: string) {
|
||||
if (type === 'doughnut' || type === 'pie') {
|
||||
return createDoughnutDatasetColorizer();
|
||||
} else if (type === 'polarArea') {
|
||||
return createPolarAreaDatasetColorizer();
|
||||
}
|
||||
return createDefaultDatasetColorizer();
|
||||
}
|
||||
|
||||
function containsColorsDefinitions(
|
||||
descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>
|
||||
) {
|
||||
@ -100,7 +101,8 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
const colorizer: DatasetColorizer = getColorizer(type);
|
||||
const colorizer = getColorizer(type);
|
||||
|
||||
datasets.forEach(colorizer);
|
||||
}
|
||||
};
|
||||
|
||||
41
test/fixtures/plugin.colors/mixed.js
vendored
Normal file
41
test/fixtures/plugin.colors/mixed.js
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
module.exports = {
|
||||
config: {
|
||||
data: {
|
||||
labels: [0, 1, 2, 3],
|
||||
datasets: [
|
||||
{
|
||||
type: 'line',
|
||||
data: [5, 20, 1, 10],
|
||||
},
|
||||
{
|
||||
type: 'bar',
|
||||
data: [6, 16, 3, 19]
|
||||
},
|
||||
{
|
||||
type: 'pie',
|
||||
data: [5, 20, 1, 10],
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
x: {
|
||||
ticks: {
|
||||
display: false,
|
||||
}
|
||||
},
|
||||
y: {
|
||||
ticks: {
|
||||
display: false,
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
legend: false,
|
||||
colors: {
|
||||
enabled: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
BIN
test/fixtures/plugin.colors/mixed.png
vendored
Normal file
BIN
test/fixtures/plugin.colors/mixed.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
Loading…
x
Reference in New Issue
Block a user