Echarts条形图实战

最近公司项目要做一个统计图用到了echarts里面的条形图,对于以前就接触过一点echarts的我信心满满,没想到动手的时候才发现问题百出,看来实践真的是检验学习成效的标准。这里有两种条形图,一种横向的一种纵向的。

不管是哪种都要先初始化echarts:

// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));

这里横向和纵向柱状图的配置无非就是x轴和y轴的不同,所以我写了两个配置项:

//横向图表的配置
var optionH = {
        grid:{
            x:150
        },
        color: ['#9BBB59'],
        title: {
            textStyle: {  
                color: '#aaa',
                fontWeight: '600'
            },
            x:'50'//设置标题的偏移
        },
        tooltip: {
            trigger: 'axis',
            formatter: "完成进度 : <br/>{b} : {c}%"
        },
        toolbox: {
            show : true,
            x:'800',
            feature : {
                dataView : {show: false, readOnly: false},  
                magicType : {show: true, type: ['line', 'bar']},  
                restore : {show: true},  
                saveAsImage : {show: true}
            }
        },
        xAxis: [{
             type : 'value',
             axisLabel : {
                 formatter: '{value} %'
              }, 
             min: 0,
             max: 100,
             interval: 10 
            }],
       yAxis: [{
           type : 'category',
           axisLabel:{
               //X轴刻度配置
               interval:0 
              },
           data: ['']
    
       }],
       series: [{
           xAxisIndex: 0,
           yAxisIndex: 0,
           type: 'bar',
           barMaxWidth:60,//最大宽度
           data: ['']
       }]
};
// 纵向图表的配置
var optionV = {
    color: ['#9BBB59'],
    title: {
            text: '',
            textStyle: {  
                color: '#aaa',
                fontWeight: '600'
            },
            x:'50'
                
        },
    tooltip: {
            trigger: 'axis',
            formatter: "完成进度 : <br/>{b} : {c}%"
        },
    toolbox: {
            show : true,
            x:'800',
            feature : {
                dataView : {show: false, readOnly: false},  
                magicType : {show: true, type: ['line', 'bar']},  
                restore : {show: true},  
                saveAsImage : {show: true}
            }
        },
    xAxis: [{
            type : 'category',
            data: [''],
            axisLabel:{
               //X轴刻度配置
               interval:0 
              }
            }
           ],
    yAxis: [{
           type : 'value',
           axisLabel : {
               formatter: '{value} %'
           }, 
           min: 0,
           max: 100,
           interval: 10
       }],
    series: [{
           type: 'bar',
           barMaxWidth:60,//最大宽度
           data: ['']
       }]
};

这个统计图一共有5种角色的区分(市级、区级、学校、班主任、学生)

首先市级的是纵向条形图,x轴为类别数据,y轴为百分比:

//市级  统计图
function loadOptionByCity(){   
   // 使用刚指定的配置项和数据显示图表
    myChart.setOption(optionV);
    var njmc= $('#staGradeSelect option:selected').val();
    var termNo = $('#staTermNo option:selected').val();
    $.ajax({  
        url: ctx + '/SCH_STATISTIC_JLYD_Action.a?findCountyStatisticScore',  
        type: 'post', 
        data: {
            "njid" : njmc,   //年级
            "termNo" :termNo  //学期
        },
        dataType: 'json',  
        async: false,  
        success: function (result) { 
            var resultCode = result.resultCode;
            var resultMsg = result.resultMsg;
            var resultList = result.resultList;
            var xArray=[];
            if (result)  
            {  
                var option = myChart.getOption();  
                option.series[0].data = [];
                option.title[0].text = titleArray[0];
                if (resultList.length == 0) { 
                    option.series[0].data = [];  
                    option.xAxis[0].data = []  
                } else { 
                    for (var i = 0; i <resultList.length; i++) {         
                            option.series[0].data.push(resultList[i].ztwcjd);  
                            xArray.push(resultList[i].qxmc);                        
                    }   
                    option.xAxis[0].data=xArray;
                } 
                myChart.setOption(option,true);  
            }
        },
        error: function ()  
        {  
            alert("不好意思请求失败了");  
        }  
    })  
}; 
      

渲染出来的图表是这样:

Paste_Image.png

区级也是纵向条形图,只不过x轴数据是写死的:

//区级  统计图
function loadOptionByArea()  
{ 
    // 使用刚指定的配置项和数据显示图表
    myChart.setOption(optionV);
    var njid= $('#staGradeSelect option:selected').val();
    var termNo = $('#staTermNo option:selected').val();
    $.ajax({  
        url: ctx + '/SCH_STATISTIC_JLYD_Action.a?findCountyStatisticScore',  
        type: 'post', 
        data: {
            "qxdm" :qxdmSelf,
            "njid" : njid,   //年级
            "termNo" :termNo  //学期
        },
        dataType: 'json',  
        async: false,  
        success: function (result) { 
            var resultCode = result.resultCode;
            var resultMsg = result.resultMsg;
            var resultList = result.resultList;
            if (result)  
            {  
                var option = myChart.getOption();  
                option.series[0].data = [];
                option.title[0].text = titleArray[1];
                if (resultList.length == 0) { 
                    option.series[0].data = [];  
                    option.xAxis[0].data = ['啊啊','哇哇','啦啦','嘻嘻','呵呵']  
                } else { 
                    var xArray=['啊啊','哇哇','啦啦','嘻嘻','呵呵']  ;
                    var yArray = [resultList[0].ztwcjd,resultList[0].zgdfjd,resultList[0].zgtbjd,resultList[0].zjtbjd,resultList[0].actbjd];
                    option.series[0].data=yArray
                    option.xAxis[0].data=xArray;
                } 
                myChart.setOption(option,true);  
            }
        },
        error: function ()  
        {  
            alert("不好意思请求失败了");  
        }  
    })  
}; 

渲染出来的图表是这样:

Paste_Image.png

校级、班主任、学生三个角色都是横向条形图,只不过传的参数和接口地址不一样,所以我封装了一个方法:

function loadOption(url,data)         
{
   // 使用刚指定的配置项和数据显示图表
   myChart.setOption(optionH);
   $.ajax({  
       url: ctx + url,  
       type: 'post', 
       data: data,
       dataType: 'json',  
       async: false,  
       success: function (result) { 
           var resultCode = result.resultCode;
           var resultMsg = result.resultMsg;
           var resultList = result.resultList;                 
           if (result)  
           {  
               var option = myChart.getOption();  
               option.series[0].data = [];
               option.yAxis[0].data = [];
               option.title[0].text = titleArray[2];
               if (resultList.length == 0) { 
                   option.series[0].data = [];  
                   option.yAxis[0].data = []  
               } else { 
                   for(var i=0;i<resultList.length;i++){
                       option.series[0].data.push(resultList[i].WCJD);
                       option.yAxis[0].data.push(resultList[i].LABELNAME);
                   }
               } 
               myChart.setOption(option,true);  
           }
       },
       error: function ()  
       {  
           alert("不好意思请求失败了");  
       }  
   })  
}; 

Paste_Image.png

总结

tooltip: {
              trigger: 'axis',
              formatter: "完成进度 : <br/>{b} : {c}%"
        }
  1. 提示框触发方式:trigger
    tooltip的trigger的值可以有'item'、'axis'。
    'item':数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
    'axis':坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
  2. 提示框的格式:formatter
    折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)如下图:
Paste_Image.png

工具箱,非常方便,可以条形图折线图相互转换,效果如下图:

toolbox: {
            show : true,
            x:'800',//在x轴的位置
            feature : {
                dataView : {show: false, readOnly: false},  //数据视图
                magicType : {show: true, type: ['line', 'bar']},  //动态转换
                restore : {show: true},  //刷新
                saveAsImage : {show: true}//保存为图片
            }
        },
Paste_Image.png
 xAxis: [{
            type : 'category',
            data: [''],
            axisLabel:{
               //X轴刻度配置
               interval:0 
              }
            }
           ]
这里需要设置x轴标签的刻度,不然会出现默认刻度单位过大或者是数据标签隔一个显示一个的怪异现象
yAxis: [{
           type : 'value',
           axisLabel : {
               formatter: '{value} %'
           }, 
           min: 0,
           max: 100,
           interval: 10
       }],
这里需要注意的是我想让y轴的刻度按百分比显示,从10%到100%,间隔为10,用到了神奇的formatter

series: [{
          type: 'bar',
          barMaxWidth:60,//最大宽度
          data: ['']
      }]
通过barMaxWidth设置柱子的最大宽度,不然数据少的时候,柱子会特别宽,影响美观

还有一个需要注意的地方,每次渲染图表都让数据置空option.series[0].data = [];不然会出现数据堆叠的怪异现象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 什么是ECharts ECharts是百度开源的纯 Javascript 图表库,目前开源可以与highchart...
    yangdm阅读 3,737评论 0 0
  • 图表思维是数据分析思维中的最简单和最基本的思维,主要是通过图形和表格对数据进行转化。 文字有局限 看到这段话,你会...
    keeya阅读 5,628评论 1 21
  • 晚上,十点半,地铁的座位并不多,甚至空间仍所剩无几。 我常常疑惑,无论白天,夜晚,工作日,休息时,北京的地铁上总...
    沧海云阅读 359评论 0 1
  • 每月往一个固定地方存上两百money. ..............以后就可以去做说走就走的旅行了
    优雅kk阅读 162评论 1 0
  • 文/ Mercealin 你开玩笑问他,你结婚那天他会来吗?他像往常一样宠溺地揉了揉你的头发说,笨蛋,新郎不去你跟...
    Mercealin阅读 1,121评论 20 9