extjs图表绘制之条形图实现方法分析


Posted in Javascript onMarch 06, 2020

本文实例讲述了extjs图表绘制之条形图实现方法。分享给大家供大家参考,具体如下:

这篇文章将介绍extjs图表中条形图。

将实现以下的功能:

1.从后端请求数据并运用到图表中,形成动态数据。

2.查询出每年各个月中人数。

3.改变条形柱的颜色,改变默认的颜色换成自己想要的颜色。

renderer: function(sprite, storeItem, barAttr, i, store) {
          barAttr.fill = '#3D96AE'
          return barAttr;
        },

extjs图表绘制之条形图实现方法分析

先看完整的代码:

Ext.define('ChartColumnTest', {
  extend: 'Ext.panel.Panel',
  autoScroll : true,
  selectYear:null,
  initComponent: function () {
    var me = this;
    me.store = me.createStore();
    me.grid = me.getGridPanel();
    me.mainPanel = Ext.create('Ext.panel.Panel',{
      layout:'fit',
      items:[me.grid],
      tbar:me.createQueryTbar(),
    });

    Ext.apply(me,{
      layout:'fit',
      items:[me.mainPanel]
    });
    me.callParent();
    me.mainPanel.down('chart').on('cellclick', function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts) {
      me.onCellClick(cellIndex, record);
    });
  },

  getGridPanel:function(){
    var me = this;
    return {
      xtype:'chart',
      animate : true,// 是否支持动态数据变化
      legend: {// 图例
        display: "bottom",
        spacing: 2,
        padding: 5,
        font: {
          name: 'Tahoma',
          color: '#3366FF',
          size: 12,
          bold: true
        }
      },
      store:me.store,
      axes:me.createAxes(),
      series:me.createSeries(),
    }
  },
  createQueryTbar: function(){
    var me=this;
    var tbar=[
      {
        xtype : 'combo',
        fieldLabel:'选择年份',
        name:'selectYear',
        queryMode : 'local',
        editable : true,
        readOnly:false,
        labelWidth: 60,
        width:200,
        store : new Ext.data.ArrayStore({
          fields : ['id','name'],

          data : []
        }),
        valueField : 'name',
        displayField : 'id',
        triggerAction : 'all',
        autoSelect : true,
        listeners : {
          beforerender : function(){
            var newyear = Ext.Date.format(new Date(),'Y');//这是为了取现在的年份数
            var yearlist = [];
            for(var i = newyear;i>=2015;i--){
              yearlist.push([i,i]);
            }
            this.store.loadData(yearlist);
          }
        }
      },
      {xtype: 'button',text : '查找',
        listeners : {
          "click" : function() {
            var value = Ext.ComponentQuery.query('[name=selectYear]')["0"].value;
            me.selectYear = value;
            me.store.load();
          }}}
    ];
    return tbar;
  },
  createStore: function () {
    var me = this;
    return Ext.create('Ext.data.JsonStore', {
      //从后端请求数据
      fields: [
        {name: 'id', mapping: 'id'},
        {name:'statTime',mapping:'statTime',type:'date',dateFormat:'time'},
        'activeCount', 'effectiveCount','effectiveProportion',
      ],
      proxy: {
        type: 'ajax',
        url: ctx+'/mvc/com/analyze/tblVwMonthUserStat',
        reader: {
          type: 'json',
          root: 'root',
          totalProperty: 'totalProperty'
        }
      },
      listeners: {
        'beforeload': function (store, operation, eOpts) {
          store.proxy.extraParams.selectYear = me.selectYear
        }
      },
      autoLoad: true
    });
  },

  createAxes: function () {
    var me = this;
    var columns = [
      {
        type: 'Numeric',
        position: 'left',
        minimum: 1000,
        maximum: 10000,

        label: {
          renderer: Ext.util.Format.numberRenderer('0,0')
        },
        title: '人数',
        grid: true,
      },
      {
        type: 'Numeric',
        position: 'right',
        minimum: 1000,
        maximum: 10000,

        label: {
          renderer: Ext.util.Format.numberRenderer('0,0')
        },
        title: '人数',
        grid: true,
      },
      {
        type: 'Time',
        position: 'bottom',
        fields: 'statTime',
        step: [Ext.Date.MONTH, 1],
        dateFormat: 'y-m',
        title: '日期',
        grid: false,

      }
    ];
    return columns;
  },
  createSeries: function () {
    var me = this;
    var columns = [
      {
        type: 'column',
        axis: 'left',
        title:'活跃用户数',
        highlight: true,
        tips: {
          trackMouse: true,
          width: 200,
          height: 28,
          renderer: function(storeItem, item) {
            this.setTitle( "人数:"+storeItem.get('activeCount')+",占比:"+storeItem.get('effectiveProportion') );
          }
        },
        //设置条形柱的颜色
        renderer: function(sprite, storeItem, barAttr, i, store) {
          barAttr.fill = '#3D96AE'
          return barAttr;
        },
        //设置显示每个坐标上的文字
        label: {
          display: 'outside',
          'text-anchor': 'middle',
          field: 'activeCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'horizontal',//改变数字方向 水平显示
          font: '25px Helvetica, sans-serif',
          'text-anchor': 'start',
          color: 'red',
        },
        xField: 'statTime',
        yField: 'activeCount',
       // yPadding:100, 距离x轴的高度
      },
    ];
    return columns;
  }

});

下面讲解上图中的代码:

1.在panel中定义图表。条形图主要data(数据)、轴(y、x轴)、系列(series)组成。

2.定义查询的tbar,图中的数据是根据年份所查询出来的,用来动态显示。

3.在y轴上标刻的是人数,定义最大值和最小值,会自动调节每个间距的大小,position 定义位置 有‘left',‘right',bottom,‘top'四种

type: 'Numeric',
        position: 'left',
        minimum: 1000,
        maximum: 10000,

4.step  定义以多少为间隔,在此案例中,我以一个月为间隔。position 定义位置 有‘left',‘right',bottom,‘top'四种,grid:false 不是网格布局。

{
        type: 'Time',
        position: 'bottom',
        fields: 'statTime',
        step: [Ext.Date.MONTH, 1],
        dateFormat: 'y-m',
        title: '日期',
        grid: false,

      }

5.tips  当鼠标放在图表上所显示的文字。在renderer方法中设置自己想显示的文字。

tips: {
          trackMouse: true,
          width: 200,
          height: 28,
          renderer: function(storeItem, item) {
            this.setTitle( "人数:"+storeItem.get('activeCount')+",占比:"+storeItem.
              get('effectiveProportion') );
          }
        },

6.可以在定义的系列中(series)中定义renderer方法,在此方法中改变条形柱的颜色。

renderer: function(sprite, storeItem, barAttr, i, store) {
          barAttr.fill = '#3D96AE'
          return barAttr;
        },

7.可以在label中调节显示文字的方向和文字显示的位置。

label: {
          display: 'outside',
          'text-anchor': 'middle',
          field: 'activeCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'horizontal',//改变数字方向 水平显示
          font: '25px Helvetica, sans-serif',
          'text-anchor': 'start',
          color: 'red',
        },

display 可以改变文字在图表中的显示位置。‘insideStart',‘insideEnd',‘outside'分别代表在条形柱的最开始,最后面和外面。大家可以自己去试试。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
用JAVASCRIPT如何给<textarea></textarea>赋值
Apr 20 Javascript
IE6与IE7中,innerHTML获取param的区别
Mar 15 Javascript
Javascript之this关键字深入解析
Nov 12 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
jquery中get和post的简单实例
Feb 04 Javascript
基于js实现投票的实例代码
Aug 04 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
vue自定义一个v-model的实现代码
Jun 21 Javascript
vue 中引用gojs绘制E-R图的方法示例
Aug 24 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 Javascript
Node.js中文件系统fs模块的使用及常用接口
Mar 06 #Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 #Javascript
JS实现网页端猜数字小游戏
Mar 06 #Javascript
extjs4图表绘制之折线图实现方法分析
Mar 06 #Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 #Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 #Javascript
Vue Router 实现动态路由和常见问题及解决方法
Mar 06 #Javascript
You might like
解决中英文字符串长度问题函数
2007/01/16 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php截取视频指定帧为图片
2016/05/16 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
在Python中编写数据库模块的教程
2015/04/29 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
python实现类之间的方法互相调用
2018/04/29 Python
python自定义时钟类、定时任务类
2021/02/22 Python
安全生产先进个人材料
2014/02/06 职场文书
公司年底活动方案
2014/08/17 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript