是否仍然要为chart.js甜甜圈图实现动画指示符?我要完成的工作看起来像这样:
我已经完成了图表的甜甜圈部分,但是似乎找不到找到增加值(大文本:89%(动态))或指标点的方法。
我使用的代码如下:
HTML
<canvas id="dashboardChart" width="400" height="400"></canvas>
JS
var ctx = document.getElementById("dashboardChart");
var dashboardChart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: ["Red", "Orange", "Green"],
datasets: [{
label: '# of Votes',
data: [33, 33, 33],
backgroundColor: [
'rgba(231, 76, 60, 1)',
'rgba(255, 164, 46, 1)',
'rgba(46, 204, 113, 1)'
],
borderColor: [
'rgba(255, 255, 255 ,1)',
'rgba(255, 255, 255 ,1)',
'rgba(255, 255, 255 ,1)'
],
borderWidth: 5
}]
},
options: {
rotation: 1 * Math.PI,
circumference: 1 * Math.PI,
legend: {
display: false
},
tooltip: {
enabled: false
},
cutoutPercentage: 95
}
});
非常感谢您的帮助!
答案 0 :(得分:0)
原始答案:
我不确定对此是否有快速简单的解决方案。
也许您可以直接在现有的饼图上创建第二个饼图,并使该饼图的周长仅几个像素,但旋转X倍,在本例中为89%。需要一点数学才能计算出半圆的89%。根据上面的图片,这不会给您一个漂亮的圆圈标记。它将为您提供一个彩色的小段,该圆段应该在该段上,并且借助一些CSS,可以将第二个饼图段四舍五入为您想要的形状。
第二个饼图可能看起来像这样...
var ctx2 = document.getElementById("dashboardChart2");
var dashboardChart2 = new Chart(ctx2, {
type: 'doughnut',
data: {
labels: ["Purple"],
datasets: [{
label: '# of Votes',
data: [5],
backgroundColor: [
'rgba(159, 90, 253, 1)'
],
borderColor: [
'rgba(255, 255, 255 ,1)',
],
borderWidth: 2
}]
},
options: {
rotation: 1 * Math.PI,/** This is where you need to work out where 89% is */
circumference: 1 * Math.PI,/** put in a much smaller amount so it does not take up an entire semi circle */
legend: {
display: false
},
tooltip: {
enabled: false
},
cutoutPercentage: 95
}
});
对于可能涉及CSS的89%的大型企业而言。将文本直接放置在饼图的“最前面”(绝对涉及z-index和位置)
新答案:
也许您可以直接在现有的甜甜圈图上创建一个甜甜圈图,并使该甜甜圈图的第一个和第三个“条”的不透明度为0,因此无法看到它们。如果第一根柱的值为88.5,第二根柱的值为1,第三根柱的值为10.5,则第二根柱的有效宽度应为89%,宽度为1%(88.5 + 1 + 10.5 = 100)。
datasets: [{
data: [88.5, 1,10.5],// how much space each bar should take
backgroundColor: [
"rgba(0,0,0,0)", // bar 1: opacity 0
"rgba(255,255,255,1)", // bar 2 is white
"rgba(0,0,0,0)", // bar 3: opacity 0
],
borderColor: [
'rgba(0, 0, 0 ,0)',// bar 1 border opacity 0
'rgba(46, 204, 113, 1)',// bar 2 border is green
'rgba(0, 0, 0 ,0)'// bar 3 border opacity 0
],
borderWidth: 3
}]
对于可能涉及CSS的89%的大型企业而言。将文本直接放置在饼图的“前面”
.percent {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
font-size: 80px;
bottom: 0;
}
此处的示例:
https://jsfiddle.net/rjtsbeLc/3/
请注意,在相对和绝对定位的情况下,我将第二个甜甜圈图放置在现有的甜甜圈图的顶部,百分比文本在其顶部居中放置在底部。
.outer {
position: relative;
width: 600px;
height: 400px;
}
canvas {
position: absolute;
}
由于“圆”是矩形,所以它并不是您所需要的,但是我碰到了这个问题,它可能会帮助您确定如何将矩形四舍五入为圆...
Chart.js圆角为https://stackoverflow.com/a/36964890/5178301的甜甜圈