本文介绍在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中实现带百分比显示的横向柱状图的讲解结束。如需了解更多相关内容,可搜索本站过往文章或浏览后续文章。感谢大家的支持!