导读:本期聚焦于小伙伴创作的《使用Chart.js创建堆叠式进度条图表的完整指南》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《使用Chart.js创建堆叠式进度条图表的完整指南》有用,将其分享出去将是对创作者最好的鼓励。

使用 Chart.js 创建堆叠式进度条图表

在数据统计与可视化场景中,堆叠式进度条图表能够直观展示多维度数据的占比关系,比如项目不同阶段的完成进度、不同分类的资源占用情况等。Chart.js 是一款轻量级、易上手的 JavaScript 图表库,支持多种图表类型,通过简单的配置就能实现堆叠式进度条效果。本文将一步步讲解如何使用 Chart.js 完成堆叠式进度条图表的开发。

前置准备

首先需要引入 Chart.js 库,我们可以通过 CDN 方式引入最新稳定版本,也可以下载本地文件引入。同时准备一个用于承载图表的 canvas 容器,设置合适的宽高保证图表展示效果。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>堆叠式进度条图表</title>
    <!-- 引入 Chart.js 库 -->
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <style>
        .chart-container {
            width: 800px;
            height: 400px;
            margin: 50px auto;
        }
    </style>
</head>
<body>
    <!-- 图表容器 -->
    <div class="chart-container">
        <canvas id="stackedProgressBar"></canvas>
    </div>
    <script src="app.js"></script>
</body>
</html>

上面的代码中,我们设置了图表容器的宽高为 800*400 像素,居中显示在页面中,同时引入了 Chart.js 的官方 CDN 资源,后续的业务逻辑会写在 app.js 文件中。

核心配置说明

要实现堆叠式进度条效果,核心在于对 Chart.js 的柱状图(bar)进行配置,关键配置项如下:

  • 图表类型:设置为 bar,即柱状图类型。
  • 堆叠配置:在数据集的 options 中开启堆叠模式,设置 scales.x.stackedscales.y.stackedtrue,让同一分类下的不同数据堆叠显示。
  • 进度条样式:将柱状图的边框宽度设为 0,调整柱体宽度,让堆叠后的效果更接近进度条样式。
  • 数据格式:每个数据集代表堆叠的一层,同一分类下的不同数据集数值相加即为该分类的总进度。

完整实现代码

接下来是 app.js 中的完整逻辑,我们以展示三个项目不同阶段的完成进度为例,每个项目包含“需求评审”“开发”“测试”三个阶段,堆叠展示各阶段的进度占比。

// 获取 canvas 元素
const ctx = document.getElementById('stackedProgressBar').getContext('2d');

// 定义项目分类(x轴数据)
const projects = ['项目A', '项目B', '项目C'];

// 定义每个阶段的数据集,每个数据集代表堆叠的一层
const data = {
    labels: projects,
    datasets: [
        {
            label: '需求评审',
            // 每个项目需求评审阶段的完成进度(百分比)
            data: [30, 25, 40],
            backgroundColor: 'rgba(54, 162, 235, 0.7)',
            borderWidth: 0
        },
        {
            label: '开发',
            // 每个项目开发阶段的完成进度(百分比)
            data: [45, 50, 35],
            backgroundColor: 'rgba(255, 159, 64, 0.7)',
            borderWidth: 0
        },
        {
            label: '测试',
            // 每个项目测试阶段的完成进度(百分比)
            data: [25, 25, 25],
            backgroundColor: 'rgba(75, 192, 192, 0.7)',
            borderWidth: 0
        }
    ]
};

// 图表配置项
const config = {
    type: 'bar',
    data: data,
    options: {
        // 调整柱体宽度,让进度条更饱满
        barPercentage: 0.6,
        categoryPercentage: 0.8,
        scales: {
            x: {
                // 开启x轴堆叠
                stacked: true,
                grid: {
                    display: false
                }
            },
            y: {
                // 开启y轴堆叠
                stacked: true,
                // 设置y轴最大值为100,对应百分比进度
                max: 100,
                title: {
                    display: true,
                    text: '完成进度(%)'
                }
            }
        },
        plugins: {
            legend: {
                position: 'top'
            },
            tooltip: {
                callbacks: {
                    label: function(context) {
                        return `${context.dataset.label}: ${context.parsed.y}%`;
                    }
                }
            }
        }
    }
};

// 创建图表实例
new Chart(ctx, config);

代码中我们首先定义了三个项目的名称作为 x 轴分类,然后分别设置了三个阶段的进度数据,每个阶段对应一个数据集。在配置项中开启堆叠模式后,同一项目下的三个阶段进度会自动堆叠,比如项目A的需求评审30%、开发45%、测试25%,堆叠后总高度为100%,正好对应完整的项目进度。同时我们调整了柱体宽度,关闭了x轴的网格线,让图表看起来更简洁,还自定义了 tooltip 的显示内容,鼠标悬停时可以清晰看到每个阶段的进度数值。

效果优化建议

如果需要让图表展示效果更好,还可以做以下调整:

  • 如果有总进度不满 100% 的情况,可以增加一个“未开始”的数据集,背景色设为浅灰色,补全剩余进度,让进度条更完整。
  • 可以给每个柱体添加圆角效果,通过设置 borderRadius 属性调整顶部和底部的圆角,让进度条更美观。
  • 如果需要展示多个维度的对比,可以增加更多的堆叠层,只要保证每个分类下的数据集数值总和不超出 y 轴最大值即可。

按照上述步骤操作后,就能得到一个清晰直观的堆叠式进度条图表,适用于大多数多维度进度展示的场景。

Chart.js堆叠式进度条数据可视化JavaScript图表进度占比展示

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。