zoukankan      html  css  js  c++  java
  • echart 柱图的(层叠柱图和柱图)label只显示总数 ,折线图的legent上显示总数

    参考了网上的例子,结合实际,记录

    实现原理:

    通过向series最后插入一个对象,该对象中的data是总和的集合,如下图

                          

     红色部分是原始数据,绿色部分是插入的最后一条数据(柱图的颜色透明化,所以看不到),展示的数字其实是最后一个的label,展示在内部的最左部分,

    这样的话,实际看起来就会显的页面占用率小,空白空间比较大, 所以进行了再次处理

    最终效果图(如上 图2),整体效果比左边的效果好了很多

    实现的代码

     后端返回的数据是

    "result": {
                "series": [
                    {
                        "name": "aa", 
                        "value": ["0", "0", "0", "0", 9, "0", "0", "0", "0", "0"]
                    }, 
                    {
                       "name": "bb", 
                        "value": ["0", "0", "0", "0", "0", "0", "0", "0", "0", 1]
                    }, 
                    {
                        "name": "cc", 
                        "value": ["0", "0", "0", 5, "0", "0", "0", "0", "0", "0"]
                    }, 
                    {
                        "name": "dd", 
                        "value": ["0", "0", "0", "0", "0", "0", 8, "0", "0", "0"]
                    }, 
                    {
                        "name": "ee", 
                        "value": ["0", "0", 6, "0", "0", "0", "0", "0", "0", "0"]
                    }, 
                    {
                        "name": "ff", 
                        "value": ["0", 4, "0", "0", "0", "0", "0", "0", "0", "0"]
                    }, 
                    {
                        "name": "gg", 
                        "value": [13, "0", "0", "0", "0", "0", "0", "0", "0", "0"]
                    }, 
                    {
                        "name": "hh", 
                        "value": ["0", "0", "0", "0", "0", 12, "0", "0", "0", "0"]
                    }, 
                    {
                        "name": "ii", 
                        "value": ["0", "0", "0", "0", "0", "0", "0", "0", 14, "0"]
                    }, 
                    {
                        "name": "jj", 
                        "value": ["0", "0", "0", "0", "0", "0", "0", 11, "0", "0"]
                    }
                ], 
                "xaxis": [13, 4, 6, 5, 9, 12, 8, 11, 14, 1]
       } 

    接下来,就是对数据的处理

    1)首先要整理出每一行的总数(注意,这个总数,指的是每一个value里取相同索引的值的和,而不是value自身所有值的累加)

     var totaldata=[];
     let itemdataLen = series[0].data.length;
    for(var i=0;i<itemdataLen;i++){
            totaldata[i]=0;
    };
    result.series.forEach((item,index)=>{
           item.value.forEach((im,ix)=>{
              totaldata[ix] += Number(im)
           });
    });

    2) 对  totaldata 中的值进行缩放 -  这样的话,在页面上的占用空间就会减少

    totaldata.forEach((item,index)=>{
        totaldata[index] = item/10;
    });

    3)在series最后插入  -- 由于之前对数据进行了缩放,所以在展示tooptip中要对数据进行放大

    var lastSeri={
         name:"总数",
         type: 'bar', 
         stack: '总量', 
         label: { 
               normal: { 
                    show: true, 
                    position: 'insideBottomLeft', 
                    formatter:function(params){
                       return params.data*10;
                    }, 
                     textStyle:{ color:'#000' } 
                 }
          }, 
           itemStyle:{ 
               normal:{ 
                  color:'rgba(128, 128, 128, 0)' 
               } 
           }, 
           data: totaldata
     };
      series.push(lastSeri);

     ----------------------------------------------------以上是柱图的 只显示总数的abel,接下来是折线图在legent上显示每条线的总数--------------------------------------------------------------------------------------------

    先放效果图

    原始数据依然是上面的数据,可能是多条线,也可能是单条线

    对数据进行处理

     var ItemlineTotal ={};
    result.series.forEach((item,index)=>{
          var total = 0;
           item.data.forEach((im,ix)=>{
                 total += Number(im)
           });
           ItemlineTotal[index] = total.toFixed(2);
    });
    let serlen = result.series.length;
    var numLen =serlen-1;
    option.legend.formatter=function(params){
        var avg =  (ItemlineTotal[numLen]/result.series[0].data.length).toFixed(2);
        var str =   params+"(count:"+ItemlineTotal[numLen]+",avg:"+avg+")";
        if(numLen == 0){
           numLen = serlen-1;
        }else{
           numLen -- ;
        };
        return str; 
    };
    option 是echat的option
  • 相关阅读:
    WNMP 环境搭建
    单元测试工具 unitils
    [转] 利用git钩子,使用python语言获取提交的文件列表
    Spring AOP理解
    JavaScript Cookies使用
    [转]SURF算法解析
    [转]四旋翼飞行器的姿态解算小知识点
    [转]C++内存管理
    学习SQL笔记
    华为软件类常见面试问题集锦
  • 原文地址:https://www.cnblogs.com/fyjz/p/13213779.html
Copyright © 2011-2022 走看看