Echarts柱状图使用最小高度解决数据差距过大,且过滤数据为0的情况

1.问题描述:柱状图两条数据差距过大时,数据小的那一条会难以显示,甚至消失,如下图:

数据是1,但和上面的800比实在太小,肉眼已经看不到了。

解决方法:series中添加最小高度(barMinHeight),添加最小高度为5(barMinHeight:5,),上述问题解决。

但是,新问题出现了,数据为0也会显示最小高度,如下图:

 2.问题描述plus:要求有最小高度,且过滤数据为0的情况。

解决思路:使用函数判断数据,过滤数据0,要知道,echarts里的每个属性都可以写函数的,在最小高度barMinHeight里写个函数是可以的。

//最小高度中写自定义函数                
barMinHeight: (function(data){
   
    //判断数据是否为0
    if (data.value == 0) {
        //是0则不设置高度,否则设置最小高度5
        return 0;
    } else {
        return 5;
    }
})(),

想法是好的,可惜,function的data是没有定义的 ,也就是说,这个函数会报错,需要进一步加工,使用全局变量传值进函数中。修改后的函数如下:

//这里的optionData是全局变量  
barMinHeight: (function (optionData) {
                
    //观察数据格式
    console.log(optionData);

    //使用for循环遍历数组
    for(var i=0;i<optionData.length;i++){
        if (optionData[i] == 0) {
            return 0;
        } else {
            return 5;
        } 
    }
})(optionData),
 

使用了一个全局变量存储数据,这个全局变量使用也很方便,还可以用来存储后台传来的json数据。

我的data格式是数组格式,使用for循环遍历,遇到0则返回,但是又有新的问题,函数返回之后就会结束循环,只能过滤第一条为0的数据,如果遇到多个数据还是会出问题。

3.解决方法

在数据下面遍历,将0数据置为空,空数据就不会显示了。

    optionData.forEach((v,index) => {
                if (v == 0)
                optionData[index] =null;
            });

如果想要柱形图显示0数据,那么在tooltip中还得还原成数据0。

附全部代码:


<!DOCTYPE html>
<html>
<!-- 测试柱状图的最小长度 -->
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
 
<body>
    <div id="main" style=" width: 500px;height: 500px;
    margin: 0 auto;"></div>
</body>
<!-- echarts版本:5.1.2 -->
<script src="js/echarts.min.js"></script>
<script src="js/jquery.js"></script>
<script>
    var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);
    var option;
    var optionData= [0, 1, 800,0];
    optionData.forEach((v,index) => {
                if (v == 0)
                optionData[index] =null;
            });
            console.log(optionData);
    option = {
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'shadow'
            },
            formatter:function(params) {

            }
        },
 
        xAxis: {
            type: 'value',
        },
        yAxis: {
            type: 'category',
            data: ['q', 'w','e','r']
        },
        series:
        {
            
            data:optionData,
            name: 'test',
            type: 'bar',
            stack: 'total',
            barMaxWidth: 50,
            barMinHeight:5,
        }
    };
    myChart.setOption(option);

</script>
 
</html>

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值