ECharts动态加载堆叠柱状图的实例-程序员宅基地

技术标签: ViewUI  json  javascript  

一、引入echarts.js文件(下载页:http://echarts.baidu.com/download.html)

二、HTML代码:

<div style="width: 100%; height: 400px;" id="main">
</div>

三、js代码(获取数据以及对数据的处理方法):

function loadData(callback){
  $.ajax({
        url: 'test.json',
        dataType: 'json',
        success: function(data){
            if(data == '' || data == null){
                return;
            }
            var nameArr = [];
            var totalGoalArr = [];
            var totalRealArr = [];
            var firstGoalArr = [];
            var firstRealArr = [];
            var secondGoalArr = [];
            var secondRealArr = [];
            var data = data.list;
            for(var i = 0; i < data.length; i++){
                var orgSn = data[i].orgSn;    //获取列表的orgSn 
                var firstGoal = getTarget1(orgSn);    //根据orgSn获取一类点规划量
                var secondGoal = getTarget2(orgSn);    //根据orgSn获取二类点规划量
                var totalGoal = firstGoal + secondGoal;    //总规划量 = 一类点规划量 + 二类点规划量
                allData[data[i].orgName] = {    //将得到的数据全部整合在allData对象中,在设置tooltip时方便使用
                    "totalGoal": totalGoal,
                    "totalReal":data[i].total,
                    "firstGoal ": firstGoal,
                    "firstReal": data[i].count1,
                    "secondGoal": secondGoal,
                    "secondReal": data[i].count2
                }
            
                nameArr.push(data[i].orgName);    //将data列表中的orgName拼接在nameArr数组中,用于x轴数据的展示
                //将通过orgSn获得的总规划量和data列表中的total值作比较,总规划量数组为totalGoal的集合。
                //若前者大于后者,则未完成,未完成量为totalGoal - data[i].total,柱子颜色为白底红边;
                //若后者大于前者,则超额完成,超额完成量为data[i].total - totalGoal,柱子颜色为蓝色
                if(data[i].total < totalGoal){    
                    totalGoalArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(255, 0 , 0)',
                                barBorderColor: 'rgb(255, 0, 0)'
                            }
                        },
                        value: totalGoal
                    });
                    totalRealArr.push({
                        itemStyle: {
                            normal: {
                                color: '#FFF',
                                barBorderColor: 'rgb(254, 0 , 0)'
                            }
                        },
                        value: totalGoal - data[i].total
                    });
                } else {
                   totalGoalArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(86, 205 , 89)',
                                barBorderColor: 'rgb(86, 205 , 89)'
                            }
                        },
                        value: totalGoal
                    });
                    totalRealArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(0, 135 , 237)',
                                barBorderColor: 'rgb(0, 135 , 237)'
                            }
                        },
                        value: data[i].total -  totalGoal
                    }); 
                }
                //将通过orgSn获得的一类点规划量和data列表中的count1值作比较,一类点规划量数组为firstGoal的集合。
                //若前者大于后者,则未完成,未完成量为firstGoal - data[i].count1;
                 //若后者大于前者,则超额完成,超额完成量为data[i].count1 - firstGoal
                if(data[i].count1 < fistGoal){
                    fistGoalArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(255, 0 , 0)',
                                barBorderColor: 'rgb(255, 0 , 0)'
                            }
                        },
                        value: data[i].count1
                    });
                    fistRealArr.push({
                        itemStyle: {
                            normal: {
                                color: '#FFF',
                                barBorderColor: 'rgb(254, 0 , 0)'
                            }
                        },
                        value: fistGoal - data[i].count1
                    });
                } else {
                   fistGoalArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(86, 205 , 89)',
                                barBorderColor: 'rgb(86, 205 , 89)'
                            }
                        },
                        value: fistGoal
                    });
                    fistRealArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(0, 135 , 237)',
                                barBorderColor: 'rgb(0, 135 , 237)'
                            }
                        },
                        value: data[i].count1 -  fistGoal
                    }); 
                }
                // 将通过orgSn获得的一类点规划量和data列表中的count1值作比较,一类点规划量数组为firstGoal的集合。
                //若前者大于后者,则未完成,未完成量为firstGoal - data[i].count1;
                //若后者大于前者,则超额完成,超额完成量为data[i].count1 - firstGoal
                if(data[i].count2 < secondGoal){
                    secondGoalArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(255, 0 , 0)',
                                barBorderColor: 'rgb(255, 0 , 0)'
                            }
                        },
                        value: data[i].count2
                    });
                    secondRealArr.push({
                        itemStyle: {
                            normal: {
                                color: '#FFF',
                                barBorderColor: 'rgb(254, 0 , 0)'
                            }
                        },
                        value: fistGoal - data[i].count2
                    });
                } else {
                   fistGoalArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(86, 205 , 89)',
                                barBorderColor: 'rgb(86, 205 , 89)'
                            }
                        },
                        value: secondGoal
                    });
                    secondRealArr.push({
                        itemStyle: {
                            normal: {
                                color: 'rgb(0, 135 , 237)',
                                barBorderColor: 'rgb(0, 135 , 237)'
                            }
                        },
                        value: data[i].count2 -  secondGoal
                    }); 
                }
            }
            //回调函数,数据加载成功后再执行代表callback的函数
                if(typeof callback == 'function'){
                    callback();
                }
            }
        });
    } 

四、js方法(加载图表的方法):

function initBarChart(){
    var myChart = echarts.init(document.elementById('main'));
    var option = {
        title: {
            text: '视频点位分类统计图',
            x: 'center',
            y: 'top'
    
        },
        tooltip: {
            trigger: 'axis',
            axisPointer: { 
                type: 'shadow'    //默认为直线,可选'line | shadow'
            },
            position: 'top',
            formatter: function(params){
                return param[0].name
                    +"<br/>监控总指标量:" + allData[params[0].name]["totalGoal"]
                    +"<br/>监控总完成量:" + allData[params[0].name]["totalReal"]
                    +"<br/><br/>一类点规划量:" + allData[params[0].name]["firstGoal"]
                    +"<br/>一类点完成量:" + allData[params[0].name]["firstReal"]
                    +"<br/><br/>二类点规划量:" + allData[params[0].name]["secondGoal"]
                    +"<br/>二类点完成量:" + allData[params[0].name]["secondReal"]
            }
        },
        legend: {
            show: false
        },
        xAxis: [{
            type: 'category',
            top: 20,
            axisTick: false,    //
            data: nameArr
        }],
        yAxis: [{
            type: 'value',
            axisTick: false,    //不显示刻度
            splitLine: false    //不显示分割线
        }],
        series: [{
            name: '监控总指标量',
            type: 'bar',
            barWidth: 10,
            stack: 'total',    //stack相同的柱子则堆叠在一起
            data: totalGoalArr
        }, {
            name: '监控总完成量',
            type: 'bar',
            barWidth: 10,
            stack: 'total',
            data: totalRealArr
        }, {
            name: '一类点规划量',
            type: 'bar',
            barWidth: 10,
            stack: 'first',
            data: firstGoalArr
        },  {
            name: '一类点完成量',
            type: 'bar',
            barWidth: 10,
            stack: 'first',
            data: fiestRealArr
        }, {
            name: '二类点规划量',
            type: 'bar',
            barWidth: 10,
            stack: 'second',
            data: secondGoalArr
        }, {
            name: '二类点完成量',
            type: 'bar',
            barWidth: 10,
            stack: 'second',
            data: secondRealArr
        }]
    };
    
    myChart.setOption(option);
}

五、js方法(调用这两个方法):

loadData(initBarChart);

六、json文件:

{
    list: [{
        "orgName": "海曙",
        "orgSn": "330203",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "青州",
        "orgSn": "3302000",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "安徽",
        "orgSn": "330205",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "贵州",
        "orgSn": "330206",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "海曙",
        "orgSn": "330207",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "杭州",
        "orgSn": "330208",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "双基",
        "orgSn": "330209",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "余姚",
        "orgSn": "330201",
        "total": 304,
        "count1": 222,
        "count2": 50
    }, {
        "orgName": "江干",
        "orgSn": "330210",
        "total": 304,
        "count1": 222,
        "count2": 50
    }]
}

七、js方法(根据orgSn获取一类指标量的方法):

function getTarget1(orgSn){ 
    var target = 0; 
    switch(orgSn){ 
        case "330203": 
            target = 100; 
            break; 
        case "3302000": 
            target = 139; 
            break;
        case "330205": 
            target = 145; 
            break;
        case "330206": 
            target = 56; 
            break;
        case "330207": 
            target = 189; 
            break;
        case "330208": 
            target = 166; 
            break;
        case "330209": 
            target = 122; 
            break;
        case "330201": 
            target = 339; 
            break;
        case "330210": 
            target = 554; 
            break;
        default:
            break;
    }
    return target;
}

八、js方法(根据orgSn获取二类指标量的方法):

function getTarget2(orgSn){ 
    var target = 0; 
    switch(orgSn){ 
        case "330203": 
            target = 300; 
            break; 
        case "3302000": 
            target = 239; 
            break;
        case "330205": 
            target = 45; 
            break;
        case "330206": 
            target = 156; 
            break;
        case "330207": 
            target = 89; 
            break;
        case "330208": 
            target = 66; 
            break;
        case "330209": 
            target = 222; 
            break;
        case "330201": 
            target = 239; 
            break;
        case "330210": 
            target = 154; 
            break;
        default:
            break;
    }
    return target;
}

 

转载于:https://www.cnblogs.com/minozMin/p/8195006.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30790841/article/details/96457778

智能推荐

Jemeter_jemeter官网下载-程序员宅基地

文章浏览阅读225次。https://www.cnblogs.com/monjeo/p/9330464.html_jemeter官网下载

从工作的角度看 CV/NLP/推荐系统选哪个?-程序员宅基地

文章浏览阅读711次。前言学院第一至第四期具有求职意向的同学中,目前已经有80%的同学拿到了国内外名企的AI算法岗位offer,或者国外名校的AI 硕士、全奖博士录取 offer。在大家的认可下,我们开始了..._cv和nlp哪个好找工作

eNSP网络构建—配置无线网络_ensp无线2个信号访问同一个地址-程序员宅基地

文章浏览阅读1.1w次,点赞14次,收藏117次。需求分析对于小型局域网中, 对于接入设备的需求,需要在局域网中部署无线网络,通过无线控制器AC管理网络中所有的无线AP设备,下发无线配置信息。无线网络发布2 4G和5G信号,满足不同设备的连接使用。拓扑图:注意:防火墙使用USG5500 ,路由器使用AR2220 , AC使用AC6005 , AP使用AP2050。拓扑描述:防火墙连接外网地址为192.168.12.9/24,路由..._ensp无线2个信号访问同一个地址

关于matlab的简介,Matlab 简介-程序员宅基地

文章浏览阅读1.3k次。&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMatlab(Matrix Laboratory)的中文名叫矩阵实验室,是一款著名的科学计算软件,也指这个软件中使用的编程语言.这里仅介绍最基本的 Matlab 功能和语法,且仅介绍本书使用到的功能.界面介绍图 1:Matlab 的 IDE 界面Matlab 的编程界面(图..._matlab产品的中文名称

python有哪些主要功能包括_python是什么 特点及功能-程序员宅基地

文章浏览阅读3.9k次。随着信息时代的发展,计算机行业的就业前景相当不错,通过了解,最近有很多小伙伴打算学习python,那么python是什么?它的特点和功能有哪些呢?相关内容如下,赶快来了解吧!python是什么Python是一种跨平台的计算机程序设计语言,是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开..._python中程序的功能是什么

如何让文字位于图片的右边并垂直居中?_文字在图片右边高度居中-程序员宅基地

文章浏览阅读3.5k次。如何让文字位于图片的右边并垂直居中?首先要知道图片的高度图中的头像height为40px_文字在图片右边高度居中

随便推点

H3C模拟器配置vlan-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏7次。Valn 11组网需求• 交换机GE_2上的VLAN 5 和VLAN 10 为Primary VLAN,其上层端口GigabitEthernet1/0/1需要允许VLAN 5 和VLAN 10 的报文携带VLAN Tag 通过。• 交换机GE_2 的下行端口GigabitEthernet1/0/2 允许Secondary VLAN 2 通过,GigabitEthernet1/0/3 允许Sec..._新华3模拟器vlan配置

img撑满全屏的方法(img非背景图)_img 铺满-程序员宅基地

文章浏览阅读4.7w次,点赞8次,收藏15次。我有一个模板,想按常规做一个div里面放置一个img图片,并且让图片铺满容器,自适应容器大小。HTML结构代码如下(在这个盒模型上,我已经放置了一些不重要的样式)。div style="height:270px;width:400px;border:2px black solid;"> a href="http://www.paipk.com">img src="..." alt="拍_img 铺满

UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb0 in position 5: invalid start byte_ebpf bcc unicodedecodeerror: 'utf-8' codec can't d-程序员宅基地

文章浏览阅读947次。UnicodeDecodeError: 'gbk' codec can't decode byte 0xfa in position 4669: illegal multibyte sequenceUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 5: invalid start bytewith open('进线汇总20201211.csv',encoding='utf8') as f: t = f._ebpf bcc unicodedecodeerror: 'utf-8' codec can't decode byte 0xb0 in positio

使用条件序列GAN改进NMT_improving neural machine translation with conditio-程序员宅基地

文章浏览阅读1.3k次。使用条件序列GAN改进NMT原文《Improving Neural Machine Translation with Conditional Sequence Generative Adversarial Nets》课程作业,因为要导出pdf所以粘贴到CSDN了,34章是笔者翻译的部分。当一篇post吧,求别喷,有问题请留言我一定改,一定改。摘要本文提出了一种将GANs应用于NMT领域的方..._improving neural machine translation with conditional sequence generative ad

产品周报第33期|完善铁粉规则,优化原创保护策略,升级创作中心的数据展示,开放业界专家自定义域名权益……_创作者中心铁粉数0-程序员宅基地

文章浏览阅读5k次。目录一、博客产品功能完善1、完善铁粉说明规则2、创作中心专栏数据升级3、发文助手新增「添加模版」指引4、免费开放业界专家自定义域名权益5、其他优化二、问答产品体验优化1、回答链接和链接详情页调整2、PC端提问页优化3、创作中心页面的问答列表优化三、首页热榜及优质内容推进方面的改进四、吐槽提建议直通车,直达CSDN各产品与运营人员查看往期改进hello,大家好,这里是「CSDN产品周报」第33期。本次更新主要涉及博客、问答及首页,欢迎大家详细了解和使_创作者中心铁粉数0

自建网盘之 NextCloud 终极记录-程序员宅基地

文章浏览阅读1.7k次。自建过许多网盘,试过 可道云、Seafile、FileRun、Nextcloud,但Nextcloud的如下特性吸引了我:完整、好用的客户端,包括 windows、mac、android、ios ...强大的插件扩展,如 Talk, Contacts, notes, Maps ...完整的第三方扩展,支持 Amazie S3, OneDrive, ..._可道云 nextcloud seafile