Highcharts 圆形进度条式测量图(一文讲透)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言:为什么选择 Highcharts 圆形进度条?

在数据可视化领域,圆形进度条因其直观性与美观性,成为展示百分比、完成度或关键指标的热门选择。Highcharts 是一款功能强大的 JavaScript 图表库,它通过简洁的 API 和丰富的配置选项,让开发者能够轻松创建高质量的圆形进度条式测量图。无论是展示项目进度、销售目标达成率,还是设备运行状态,这种图表都能以“一目了然”的方式传递信息。

对于编程初学者而言,Highcharts 的学习曲线相对平缓,其文档完善且示例丰富;中级开发者则可以通过自定义配置实现复杂需求。本文将从基础概念到实战案例,逐步拆解如何构建一个专业的圆形进度条式测量图。


圆形进度条式测量图的核心概念

什么是 Highcharts?

Highcharts 是由挪威公司 Highsoft 开发的开源图表库,支持生成折线图、柱状图、饼图、仪表盘等 20 多种图表类型。其核心优势在于:

  • 跨平台兼容性:支持现代浏览器(Chrome、Firefox 等)及移动设备。
  • 高度可定制化:通过 JSON 配置对象灵活调整样式、动画和交互行为。
  • 社区与生态:拥有活跃的开发者社区和丰富的插件资源。

圆形进度条的特性与适用场景

圆形进度条本质上是一种简化版的仪表盘(Gauge),它以环形或半环形的“进度条”形式,直观展示数值在 0 到 100% 范围内的完成度。其特点包括:

  • 视觉聚焦:通过颜色对比和弧形设计,引导用户关注核心数据。
  • 动态更新:支持实时数据绑定,适用于监控系统(如服务器负载、传感器数据)。
  • 自适应布局:可通过 CSS 轻松适配不同屏幕尺寸。

适用场景示例:

  • 项目进度展示(如“任务完成率 78%”)
  • 健康指标监测(如“心率达标率”)
  • 金融产品收益可视化(如“年化收益 9.5%”)

第一步:环境搭建与基础配置

引入 Highcharts 库

在 HTML 文件中,通过 CDN 引入 Highcharts 核心库及所需的模块(如 gauge):

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/gauge.js"></script>

创建 HTML 容器

定义一个 <div> 元素作为图表的渲染容器,并设置初始尺寸:

<div id="container" style="width: 300px; height: 300px;"></div>

配置基础选项

通过 JavaScript 初始化图表,配置核心参数:

Highcharts.chart('container', {
    chart: {
        type: 'gauge', // 指定图表类型为仪表盘
        plotBackgroundColor: null,
        plotBackgroundImage: null,
        plotBorderWidth: 0,
        plotShadow: false
    },
    title: {
        text: '任务进度' // 主标题文本
    },
    pane: {
        startAngle: -150, // 起始角度(默认-150度)
        endAngle: 150,    // 终止角度(默认150度)
        background: [{
            // 背景环形样式
            backgroundColor: '#EEE',
            innerRadius: '60%',
            outerRadius: '100%',
            shape: 'arc'
        }]
    },
    yAxis: {
        min: 0,
        max: 100, // 最大值
        labels: {
            format: '{value}%' // 标签格式
        },
        plotBands: [{
            from: 0,
            to: 50,
            color: '#FFD700', // 低区颜色(黄色)
            thickness: '20%'  // 区域宽度
        }, {
            from: 50,
            to: 100,
            color: '#90EE90', // 高区颜色(绿色)
            thickness: '20%'
        }]
    },
    series: [{
        name: '进度',
        data: [78], // 初始数据值
        dataLabels: {
            enabled: true,
            format: '{y}%', // 显示当前数值
            style: {
                fontSize: '24px',
                color: 'black'
            }
        }
    }]
});

实战案例:构建动态 CPU 使用率监测仪表盘

需求分析

假设我们需要实时显示服务器 CPU 使用率,要求:

  1. 仪表盘半径为 200px,背景为深灰色。
  2. 当使用率低于 50% 时显示黄色,超过 50% 显示绿色。
  3. 指针跟随数值变化,并添加动画效果。

完整代码实现

<!DOCTYPE html>
<html>
<head>
    <title>CPU 使用率监测</title>
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <script src="https://code.highcharts.com/modules/gauge.js"></script>
</head>
<body>
    <div id="cpu-gauge" style="width: 400px; height: 400px;"></div>

    <script>
        Highcharts.chart('cpu-gauge', {
            chart: {
                type: 'gauge',
                plotBackgroundColor: '#333', // 深灰色背景
                height: 400,
                width: 400
            },
            title: {
                text: 'CPU 使用率'
            },
            pane: {
                startAngle: -90,
                endAngle: 90, // 调整为半圆形
                center: ['50%', '70%'], // 调整中心位置
                size: '140%' // 放大半径
            },
            yAxis: {
                min: 0,
                max: 100,
                labels: {
                    style: {
                        color: 'white'
                    }
                },
                plotBands: [{
                    from: 0,
                    to: 50,
                    color: '#FFD700',
                    thickness: '30%'
                }, {
                    from: 50,
                    to: 100,
                    color: '#90EE90',
                    thickness: '30%'
                }],
                minorTickInterval: 'auto',
                tickPixelInterval: 30
            },
            series: [{
                name: 'CPU',
                data: [42], // 初始值 42%
                dataLabels: {
                    format: '{y}%',
                    style: {
                        color: 'white',
                        fontSize: '24px'
                    }
                },
                dial: { // 指针样式
                    radius: '80%',
                    backgroundColor: 'white',
                    baseWidth: 4,
                    rearLength: '0%'
                },
                animation: {
                    duration: 1500 // 动画时长
                }
            }]
        });
    </script>
</body>
</html>

代码解析

  1. 半圆形设计:通过 startAngleendAngle 设置为 -90 和 90,形成半圆。
  2. 指针动画animation.duration 控制指针转动速度,使数据更新更平滑。
  3. 深色主题:通过 plotBackgroundColorlabels.style 实现暗色背景与白色文字的对比。

高级技巧:自定义样式与交互功能

1. 动态数据更新

通过 chart.series[0].update() 方法实时更新数值:

// 假设每秒获取新的 CPU 使用率
setInterval(function() {
    const newValue = Math.random() * 100; // 模拟随机数据
    chart.series[0].update({
        data: [newValue]
    });
}, 2000);

2. 添加辅助标签

yAxis 中配置 plotBandslabel 属性,显示阈值说明:

yAxis: {
    plotBands: [{
        from: 0,
        to: 50,
        label: {
            text: '低负载',
            style: {
                color: 'black',
                fontSize: '12px'
            }
        }
    }, {
        from: 50,
        to: 100,
        label: {
            text: '高负载',
            style: {
                color: 'black'
            }
        }
    }]
}

3. 3D 效果与阴影

通过 pane.backgroundinnerRadiusouterRadius 调整环形厚度,结合 plotShadow 添加立体感:

pane: {
    background: [{
        backgroundColor: {
            linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
            stops: [
                [0, '#333'],
                [1, '#555']
            ]
        },
        innerRadius: '60%',
        outerRadius: '100%',
        shape: 'arc'
    }]
},
plotShadow: true

常见问题与解决方案

问题 1:图表未渲染,报错“Highcharts is not defined”

原因:未正确加载 Highcharts 库,或加载顺序错误。 解决方法

  • 检查 CDN 链接是否有效。
  • 确保 <script> 标签在 HTML 的 <body><head> 中正确嵌入。
  • 如果使用模块化方式(如 Webpack),需通过 npm 安装并引入。

问题 2:指针位置与数值不匹配

原因yAxisminmax 值设置错误,导致比例计算异常。 解决方法

  • 确保 yAxis.minyAxis.max 与数据范围一致(如 0-100)。
  • 若数据为小数,可使用 tickInterval 调整刻度间隔。

问题 3:移动端显示模糊

原因:未设置响应式布局,或未使用视网膜屏幕适配。 解决方法

  • 通过 CSS 添加 transform: scale(0.5) 调整缩放比例。
  • 使用 chart.setSize() 动态调整图表尺寸。

结论:Highcharts 的可视化价值与未来展望

Highcharts 圆形进度条式测量图凭借其直观性、可定制性和跨平台特性,成为数据可视化领域的“轻量级明星”。无论是用于企业级仪表盘、个人项目展示,还是教育场景中的数据教学,它都能以简洁的代码实现专业效果。

对于开发者而言,掌握 Highcharts 的核心配置逻辑后,可以进一步探索其高级功能,如:

  • 数据绑定:与后端 API 实时同步数据。
  • 主题系统:通过 Highcharts.setOptions() 创建全局主题。
  • 插件开发:利用 Highcharts 的扩展机制实现自定义图表类型。

建议读者通过官方文档(https://www.highcharts.com/docs )深入学习,同时关注社区案例库,将理论与实践结合。随着可视化需求的日益复杂,Highcharts 的灵活性和扩展性将持续为开发者提供强大支持。

最新发布