ECharts实现带百分比显示的横向柱状图技巧

作者:键盘侠

时间:2026-10-24

浏览:70

本文介绍在ECharts中实现带百分比标签的横向柱状图的方法。核心思路是利用两个Bar系列叠加:底层Bar作为100%背景,顶层Bar显示实际数据。通过自定义data对象存储最大值,利用label formatter计算并显示百分比,同时结合zlevel和barGap控制层级与间距,实现美观的进度条式图表效果。

文章目录

实例代码


var data = [220, 182, 191, 234, 290, 120, 65, 444];
var barWidth = 20;
var maxNum = 0;
for (var i = 0; i < data.length; i++) {
    if (data[i] > maxNum) {
        maxNum = data[i];
    }
}
 
option = {
    backgroundColor: 'black',
    grid: {
        top: '10%',
        left: '20%',
        right: '10%',
        bottom: '0%',
    },
 
    title: {
        text: '百分比柱子',
    },
    xAxis: {
        show: false,
    },
    yAxis: {
        data: data.map((item, index) => `data ${index}`),
        splitLine: {
            show: false,
        },
        axisLabel: {
            textStyle: { fontSize: '80%', color: '#02afff' },
        },
        axisLine: {
            show: false,
        },
        axisTick: false,
    },
    series: [
        {
            type: 'bar',
            barWidth: barWidth,
            zlevel: 2,
            data: data.map(function (item) {
                return {
                    value: item,
                    maxNum: maxNum,
                };
            }),
            label: {
                show: true,
                position: 'inside',
                // distance: 80,
                align: 'center',
                formatter: function (params) {
                    // return params.data.realValue;
                    var percent = Number((params.data.value / params.data.maxNum) * 100).toFixed(2) + '%';
                    return percent;
                },
                color: '#fff',
                fontSize: 12,
            },
            itemStyle: {
                borderRadius: 10,
                color: new echarts.graphic.LinearGradient(0, 1, 1, 1, [
                    { offset: 0, color: '#395CFE' },
                    { offset: 1, color: '#2EC7CF' },
                ]),
            },
        },
        {
            type: 'bar',
            barWidth: barWidth,
            barGap: '-100%',
            data: data.map(function (item) {
                return {
                    realValue: item,
                    value: maxNum,
                };
            }),
            label: {
                show: true,
                position: 'right',
                distance: 80,
                align: 'right',
                formatter: function (params) {
                    return params.data.realValue + ' 件';
                },
                color: '#02afff',
                fontSize: 18,
            },
            itemStyle: {
                borderRadius: 10,
                color: 'rgba(3,169,244, 0.5)',
            },
        },
    ],
};

效果图

实例代码

代码解析

首先,在配置option之前,定义一个包含数值的data数组。通过for循环遍历该数组,找出其中的最大值,并将其保存为maxNum变量,以便后续计算百分比使用。

接着,在series配置中定义两个bar系列。第一个bar的data通过map方法生成,其value取自步骤1中的data数组,同时返回一个包含value和maxNum属性的对象。这里value是必填属性,而maxNum是自定义属性,用于后续label formatter中计算百分比(value/maxNum)。这种在series的data中返回对象类型的写法较为少见,但能方便地获取数据进行计算。

3、series里第二个bar,也是通过map给data赋值,不同的是这个bar的value全部都设置为maxNum,第二个bar作为背景,相当于是100%进度。之所以还需要加一个realValue属性,因为在bar的右边还需要显示每一项的数值(220, 182, 191, 234, 290, 120, 65, 444这些)。

为了让第一个bar显示在第二个bar之上,关键在于设置第一个bar的zlevel为2,并将第二个bar的barGap设置为'-100%',从而实现两个bar的完美重叠与对齐。

建议多参考ECharts官网的案例,这有助于深入理解其配置逻辑,对实际开发大有裨益。

总结

至此,关于如何在ECharts中实现带百分比显示的横向柱状图的讲解结束。如需了解更多相关内容,可搜索本站过往文章或浏览后续文章。感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章