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 相关文章推荐
jquery 学习笔记一
Apr 07 Javascript
js escape,unescape解决中文乱码问题的方法
May 26 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
vue多次循环操作示例
Feb 08 Javascript
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 Javascript
swiper自定义分页器的样式
Sep 14 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
php实现paypal 授权登录
2015/05/28 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Saltstack快速入门简单汇总
2016/03/01 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
python文件和文件夹复制函数
2020/02/07 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
研发工程师岗位职责
2014/04/28 职场文书
学校创先争优活动总结
2014/08/28 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
工作试用期自我评价
2015/03/10 职场文书
大学学生会竞选稿
2015/11/19 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技