gpt4 book ai didi

javascript - 将 donut 饼图显示为圆形进度 Chart.js

转载 作者:行者123 更新时间:2023-12-01 15:47:31 24 4
gpt4 key购买 nike

我想问是否有一种方法可以将饼图制作为具有百分比值的圆形进度,我只想要一个彩色的切片
像这样的东西:

enter image description here

这是my fiddle现在我只想要一个数据。

HTML:

<canvas id="chartProgress" width="300px" height="200"></canvas>

JS:
var chartProgress = document.getElementById("chartProgress");
if (chartProgress) {
var myChartCircle = new Chart(chartProgress, {
type: 'doughnut',
data: {
labels: ["Africa", 'null'],
datasets: [{
label: "Population (millions)",
backgroundColor: ["#5283ff"],
data: [68, 48]
}]
},
plugins: [{
beforeDraw: function(chart) {
var width = chart.chart.width,
height = chart.chart.height,
ctx = chart.chart.ctx;

ctx.restore();
var fontSize = (height / 150).toFixed(2);
ctx.font = fontSize + "em sans-serif";
ctx.fillStyle = "#9b9b9b";
ctx.textBaseline = "middle";

var text = "68%",
textX = Math.round((width - ctx.measureText(text).width) / 2),
textY = height / 2;

ctx.fillText(text, textX, textY);
ctx.save();
}
}],
options: {
legend: {
display: false,
},
responsive: true,
maintainAspectRatio: false,
cutoutPercentage: 85
}
});
}

我知道我可以使用普通的 HTML 和 CSS 或使用简单的插件来做到这一点,但我想使用 Chart.js 来做到这一点

最佳答案

Plugin Core API提供可用于执行自定义代码的不同钩子(Hook)。您已经使用 beforeDraw钩在 donut 中间绘制文本。
您现在还可以使用 beforeInit Hook 以修改图表配置以满足您的需求:

beforeInit: (chart) => {
const dataset = chart.data.datasets[0];
chart.data.labels = [dataset.label];
dataset.data = [dataset.percent, 100 - dataset.percent];
}
鉴于此代码,您的 dataset 的定义看起来很简单,如下所示:
{
label: 'Africa / Population (millions)',
percent: 68,
backgroundColor: ['#5283ff']
}
最后你必须定义一个 tooltips.filter ,以便工具提示仅出现在相关段。
tooltips: {
filter: tooltipItem => tooltipItem.index == 0
}
请查看您修改后的代码,看看它是如何工作的。

var myChartCircle = new Chart('chartProgress', {
type: 'doughnut',
data: {
datasets: [{
label: 'Africa / Population (millions)',
percent: 68,
backgroundColor: ['#5283ff']
}]
},
plugins: [{
beforeInit: (chart) => {
const dataset = chart.data.datasets[0];
chart.data.labels = [dataset.label];
dataset.data = [dataset.percent, 100 - dataset.percent];
}
},
{
beforeDraw: (chart) => {
var width = chart.chart.width,
height = chart.chart.height,
ctx = chart.chart.ctx;
ctx.restore();
var fontSize = (height / 150).toFixed(2);
ctx.font = fontSize + "em sans-serif";
ctx.fillStyle = "#9b9b9b";
ctx.textBaseline = "middle";
var text = chart.data.datasets[0].percent + "%",
textX = Math.round((width - ctx.measureText(text).width) / 2),
textY = height / 2;
ctx.fillText(text, textX, textY);
ctx.save();
}
}
],
options: {
maintainAspectRatio: false,
cutoutPercentage: 85,
rotation: Math.PI / 2,
legend: {
display: false,
},
tooltips: {
filter: tooltipItem => tooltipItem.index == 0
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="chartProgress"></canvas>

关于javascript - 将 donut 饼图显示为圆形进度 Chart.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com