echarts多列柱状图求合计,并且展示在最顶端

思路一:给series集合末尾多加一栏用于展示合计,但是值都是0;
缺点:必须根据xAxis的data生成一组为空的数据,且tooltip不能加trigger: ‘axis’,这个条件,不然会展示合计:0。
数据为模拟数据,已经实现ajax后台动态传数据,但这里不做细讲,主要研究echarts的js求和方法。
完整代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts1</title>
    <!-- 引入 echarts.js -->
     <script src="https://cdn.bootcss.com/echarts/3.5.4/echarts.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 1600px;height:800px;"></div>
     <script type="text/javascript">    
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main')); 
            //定义图表option  
            var option =  {
                    tooltip : {
                        axisPointer : {
                            type : 'shadow'
                        }
                    },
                    title: {
                        text:'xxx激活设备数',
                        left:'left' ,
                        top:'10px',
                        textStyle: {
                        color: '#666',
                        fontWeight: 'normal'
                        }
                    },
                    toolbox: {
                        feature: {
                        dataView: {show: true, readOnly: false},
                        magicType: {show: true, type: ['line', 'bar']},
                        restore: {show: true},
                        saveAsImage: {show: true}
                        }
                    },
                    grid: {
                        y: '10%',
                        y2: '10%'
                    },
                     legend: {
                        data:['安卓','诺基亚','苹果']
                    },
                    xAxis:{
                        type: 'category',
                        axisLabel:{
                        interval: 0,    // {number}
                        rotate: 40
                        },
                        data: ['星期三','星期四']
                        },
                    yAxis:{
                        type: 'value',
                        min: 0,
                        interval: 10000
                    },
                    series: [
                        {
                            name:'安卓',
                            type:'bar',
                            stack:'xxx',
                            itemStyle: {
                                normal: {
                                    color: '#548dd5'
                                }
                            },
                            data: [["星期三",10000],["星期四",20000]]
                        },
                        {
                            name:'诺基亚',
                            type:'bar',
                            stack:'xxx',
                            itemStyle: {
                                normal: {
                                    color: '#000'
                                }
                            },

                            data:  [["星期三",11000],["星期四",21000]]
                        },
                        {
                            name:'苹果',
                            type:'bar',
                            stack:'xxx',
                            itemStyle: {
                                normal: {
                                    color: '#e56c0a'
                                }
                            },

                            data:  [["星期三",12000],["星期四",18000]]
                        },
                        {
                            name:'合计',
                            type:'bar',
                            stack:'xxx',
                            label: {
                                normal: {
                                    show: true,
                                    position: 'top',
                                    textStyle: {
                                        color: '#000'
                                    },
                                    formatter:''
                                }
                            },
                            data:  [["星期三",0],["星期四",0]]    //思路一:给series集合末尾多加一栏用于展示合计,但是值都是0;缺点:必须根据xAxis的data生成一组为空的数据,且tooltip不能加trigger: 'axis',这个条件,不然会展示合计:0
                        }
                    ]
}; 

        var series = option["series"];
        var fun = function (params) { 
                var data3 =0;
                for(var i=0,l=series.length;i<l;i++){ 
                    data3 += series[i].data[params.dataIndex][1]
                } 
                return data3
            }
        //加载页面时候替换最后一个series的formatter
        series[series.length-1]["label"]["normal"]["formatter"] = fun 
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);

        //legend点击事件,根据传过来的obj.selected得到状态是true的legend对应的series的下标,再去计算总和
        myChart.on("legendselectchanged", function(obj) {
                var b = obj.selected
                  , d = [];
                  //alert(JSON.stringify(b))
                  for(var key in b){
                    if(b[key]){
                        //alert(key)
                        for(var i=0,l=series.length;i<l;i++){  
                            var changename = series[i]["name"]; 
                            if(changename == key){ 
                                d.push(i);//得到状态是true的legend对应的series的下标
                            }
                        }
                    }
                 }   
                var fun1 = function (params) { 
                    var data3 =0;
                    for(var i=0,l=d.length;i<l;i++){
                        for(var j=0,h=series.length;j<h;j++){ 
                            if(d[i] == j){
                                data3 += series[j].data[params.dataIndex][1] //重新计算总和
                            }
                        }
                    }
                    return data3
                }
                series[series.length-1]["label"]["normal"]["formatter"] = fun1
                myChart.setOption(option);

          })

    </script>
</body>
</html>

最终效果图如下:
这里写图片描述
这里写图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue-Echarts多列柱状图是使用Vue框架和Echarts图表库来实现的一种图表类型。它可以显示多个列的柱状图,每个列代表不同的数据系列。在Vue-Echarts中,可以通过高度封装的方式来使用Echarts的折线图和柱状图功能。引用的混入文件可以帮助实现窗口改变时,使Echarts图表自适应。 对于多列柱状图,每一列的数据可以通过series中的配置来设置。在3D柱状图中,数据分为底部切片、中间柱子和顶部切片三个部分。可以通过配置不同的系列来表示不同的数据列。 具体实现多列柱状图的步骤如下: 1. 使用Vue-Echarts库来创建一个Vue组件,并引入相关依赖。 2. 在Vue组件中,使用Echarts的option配置对象来设置图表的样式、数据和系列。 3. 在option中的series属性中,通过配置不同的系列来表示多个数据列。 4. 按照需配置其他的Echarts选项,如x轴、y轴、图例等。 5. 在Vue组件中渲染并显示Echarts图表。 通过以上步骤,可以实现一个Vue-Echarts多列柱状图。在图表中,每一列代表一个数据系列,可以展示多个数据的对比情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue-echarts-element-stylus:高度封装的elemnet表格组件,高度封装echarts,excel表格上传,excel表格下载](https://download.csdn.net/download/weixin_42133452/18559339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue2.x-echarts公共组件封装--简易篇(3d柱状图,炫酷仪表盘,折线,曲线图)](https://blog.csdn.net/vscode_js/article/details/125913485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值