ECharts动态加载堆叠柱状图的实例

一、引入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

时间: 2024-10-10 08:35:40

ECharts动态加载堆叠柱状图的实例的相关文章

Echarts动态加载后台数据

注意:1.用Ajax请求获取后台数据 2.Echarts只能处理Json数据 后台Controller:根据业务需求不同而返回不同数据,我前台要循环遍历Echarts的series进行数据添加,所以后台返了个二维数组过去. 前端JSP页面:为Echarts准备一个具有高宽的dom容器 前端JS:初始化时即加载Echarts,将不需要进行加载的配置项(例如title.tooltip等)不作改动,将需要动态加载数据的配置放入ajax的success:function(){}中进行处理. 定义一个为s

eCharts动态加载各省份的数据

假如从数据库读出以下数据,如何将数据展示在地图之上 1.部门的名称数据: List deptname=[联通事业部-上海联通项目组, 联通事业部-河南联通项目组, 联通事业部-贵州联通项目组, 联通事业部-黑龙江联通项目组, 联通事业部-总部项目中心, 联通事业部-河北联通项目组, 联通事业部-北京联通项目组, 联通事业部-西藏联通项目组, 联通事业部-湖北联通项目组, 联通事业部-江苏联通项目组, 联通事业部-宝马业务拓展部, 联通事业部-浙江联通项目组, 联通事业部-重庆联通项目组, 联通事

js实现动态加载脚本的方法实例汇总

本文实例讲述了js实现动态加载脚本的方法.分享给大家供大家参考,具体如下: 最近公司的前端地图产品需要做一下模块划分,希望用户用到哪一块的功能再加载哪一块的模块,这样可以提高用户体验. 所以到处查资料研究js动态脚本的加载,不过真让人伤心啊!,网上几乎都是同一篇文章,4种方法,讨厌其中拷贝别人成果的人,也不加个原文的链接.哎!关键是最后一种方法还有点错误.经过两天的研究查阅资料,在这里和大家分享一下. 首先我们需要一个被加载的js文件,我在一个固定文件夹下创建了一个package.js,打开后在

黄聪:AngularJS 动态加载控制器实例-ocLoazLazy

一.AngularJS动态加载控制器和视图实例 路由配置关键代码: [javascript] view plain copy print? //二级页面 $stateProvider.state('main', { url: '/:name', /**如果需要动态加载数据和控制器***/ views: { "": { templateUrl: function ($stateParams) { console.info($stateParams); return '/template/

Echarts ajax动态加载json数据

后台php写的,给前台准备好json格式数据 public function actionGetOffline(){ $userid = Yii::$app->user->identity->user_id; $connection = Yii::$app->db; $command = $connection->createCommand("SELECT proc_phase_id from tb_pro where user_id like '%$userid%

echarts在.Net中使用实例(二) 使用ajax动态加载数据

前一篇文章链接:echarts在.Net中使用实例(一) 简单的Demo 通过上一篇文章可以知道和echarts参考手册可知,series字段就是用来存储我们显示的数据,所以我们只需要用ajax来获取series的值就可以. option 名称 描述 {color}backgroundColor 全图默认背景,(详见backgroundColor),支持rgba,默认为无,透明 {Array} color 数值系列的颜色列表,(详见color),可配数组,eg:['#87cefa', 'rgba

Echarts使用及动态加载图表数据

Echarts使用及动态加载图表数据 官网:http://echarts.baidu.com/ 1.文档 2.实例 名词: 1.统计维度(说明数据) 维度就是统计致力于建立一个基于多方位统计(时间.地域.访问者).全方位分析网站流量的统计标准,形成原始数据,数据视觉化,数据行为化,数据深入挖掘的数据分析的模式 2.指标(衡量数据) 指标是指可以按总数或比值衡量的具体维度元素.例如,维度"城市"可以关联指标"人口",其值为具体城市的居民总数  

highcharts 柱状图 动态加载

highcharts柱状图动态加载 (1):导入样式 <script type="text/javascript" src="<%=request.getContextPath()%>/boot_js/jquery/jquery-1.8.3.min.js"></script><script type="text/javascript" src="<%=request.getContextP

Winform动态加载TabControl用法实例

本文实例讲述了Winform动态加载TabControl用法.分享给大家供大家参考. 具体实现代码如下: 代码如下: private void BindTabData() { dtIPD = new DataTable(); //drItem = new DataTable(); //获取[项目大类]列表显示于 TabPage MRD_Score model = new MRD_Score(); model.ActiveFlag = "Y"; DataTable dtScore = f