
在许多业务场景中,我们需要直观地展示某个指标的当前值与预设目标之间的关系。例如,项目完成度、销售额目标、生产配额等。传统的柱状图可能只能显示当前值,但如果能同时在一个柱状图中以堆叠形式展现“已完成”和“还需完成”的部分,将极大提升数据的可读性和决策效率。当当前值未达到目标时,图表应清晰显示还需要多少才能达标;而当目标达成甚至超越时,则不应显示“还需完成”的部分。
Chart.js是一个开源的JavaScript图表库,它允许开发者使用canvas元素创建各种类型的图表,包括柱状图、折线图、饼图等。其核心优势在于轻量级、易用性强以及高度可定制化。
要创建图表,通常需要以下几个关键元素:
要实现“当前值 + 剩余量”的堆叠柱状图,关键在于对原始数据进行预处理,将其转换为Chart.js能够理解的两个独立数据集:一个代表已完成的量,另一个代表距离目标还差的量。
假设我们的目标值是 TARGET = 60。对于每一个原始数据点 currentValue,我们需要计算出:
通过这种方式,我们可以为Chart.js准备两个数据集,它们将以堆叠的形式展示。
为了实现堆叠柱状图,我们需要在Chart.js的配置中明确指定 type: 'bar',并且在轴的配置中启用堆叠模式。
HTML 结构:
首先,在HTML页面中创建一个canvas元素作为图表的容器。
<div style="width: 500px;height: 300px"> <canvas id="mychart"></canvas> </div>
JavaScript 数据与配置:
我们将定义两个数据集:一个用于表示当前值,另一个用于表示待完成的剩余量。
(function() {
const ctx = document.getElementById("mychart");
// 原始数据,例如:[已通过, 已失败, 进行中]
const initialData = [10, 5, 80];
const labels = ['Passed', 'Failed', 'In Progress'];
const targetValue = 60; // 设定目标值
// 计算待完成的数据集
const remainingData = initialData.map(e => (e >= targetValue ? 0 : targetValue - e));
// 构建Chart.js所需的数据结构
const datas = {
labels: labels,
datasets: [{
label: 'Current Amount', // 当前量
data: initialData,
backgroundColor: [
"green", // 例如,为“Passed”设置绿色
"blue", // 为“Failed”设置蓝色
"orange" // 为“In Progress”设置橙色
],
}, {
label: 'Remaining to Target', // 待完成量
backgroundColor: 'red', // 待完成量统一用红色显示
data: remainingData,
}]
};
// Chart.js 图表配置
const chr = new Chart(ctx, {
type: 'bar', // 图表类型为柱状图
data: datas,
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
x: {
stacked: true, // X轴启用堆叠
},
y: {
stacked: true, // Y轴启用堆叠
// 可以设置Y轴的最大值,例如略高于目标值,以确保图表完整显示
// max: targetValue + 10
}
}
}
});
})();通过对原始数据进行简单的预处理,我们成功地利用Chart.js创建了一个功能强大的堆叠柱状图,它不仅展示了当前值,还直观地呈现了距离目标还需努力的部分。这种数据可视化方法在项目管理、目标追踪等场景中具有很高的实用价值。掌握这种数据转换技巧,将使您能够利用Chart.js实现更复杂、更富有洞察力的图表。
以上就是使用Chart.js创建带目标值的堆叠柱状图:可视化进度与剩余量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号