javascript - Chart.js:条形图多种颜色
问题描述
有没有办法拥有多种颜色?
例子:
谢谢!
解决方案
新答案:
我最初的回答困扰着我,我认为必须有更好的方法来实现这种风格。所以这里有一个更好的解决方案,它使用径向渐变。
请注意,此实现非常幼稚,因为它仅支持单个数据集!
const colours = [
{ primary: '#fec1c6', shadow: '#e8b0b5' },
{ primary: '#bdeeed', shadow: '#aad2d0' },
{ primary: '#e4da84', shadow: '#d3ca76' }
];
new Chart(document.getElementById('chart'), {
type: 'doughnut',
data: {
datasets: [{
data: [3, 2, 2]
}]
},
options: {
cutoutPercentage: 65
},
plugins: [{
beforeDatasetsUpdate: c => {
const x = (c.chartArea.right + c.chartArea.left) / 2,
y = (c.chartArea.bottom + c.chartArea.top) / 2,
bgc = [];
for (let i = 0; i < colours.length; i++) {
const gradient = c.ctx.createRadialGradient(x, y, c.innerRadius, x, y, c.outerRadius);
gradient.addColorStop(0, colours[i].shadow);
gradient.addColorStop(.4, colours[i].shadow);
gradient.addColorStop(.45, colours[i].primary);
gradient.addColorStop(1, colours[i].primary);
bgc.push(gradient);
}
c.config.data.datasets[0].backgroundColor = bgc;
}
}]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="chart" height="75"></canvas>
原答案:
如果您不介意“肮脏”的解决方案,您可以通过复制数据集来获得类似的视觉效果,例如:
const values = [3, 2, 2],
primaryColours = ['#fec1c6', '#bdeeed', '#e4da84'],
secondaryColours = ['#e8b0b5', '#aad2d0', '#d3ca76'];
new Chart(document.getElementById('chart'), {
type: 'doughnut',
data: {
datasets: [{
data: values,
weight: 2,
backgroundColor: primaryColours,
borderColor: primaryColours
}, {
data: values,
weight: 1,
backgroundColor: secondaryColours,
borderColor: secondaryColours
}]
},
options: {
cutoutPercentage: 65
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="chart" height="75"></canvas>
推荐阅读
- typescript - Typescript 如何在类型系统中表达字符串连接
- java - 到目前为止,异常 jdbc 错误尝试了所有解决方案
- bash - 通过 bash 将输出重定向到文件
- git - 获取与特定分支上文件的最后更改相关的标签名称
- java - Tinkerpop 注册自定义类 kryo
- mysql - 如何区分每种类型的最大计数
- reactjs - 尝试在 asp.net core 2 中静态提供 CRA 构建文件夹
- java - Android 上的 Kaldi - 无法解析“:app@debug/compileClasspath”的依赖关系:无法解析项目:speechutils:app。?
- cuda - 对 CUDA 内核中的所有线程求和一个变量并将其返回给主机
- r - 如何计算矩阵列表中特定行的总和