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 篱式条件判断
Aug 22 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
Jul 21 Javascript
js克隆对象、数组的常用方法介绍
Sep 26 Javascript
jquery查找tr td 示例模拟
May 08 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
js实现点击展开隐藏效果(实例代码)
Sep 28 Javascript
javascript实现自由编辑图片代码详解
Jun 21 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 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 COOKIE及时生效的方法介绍
2014/02/14 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
python实现手势识别的示例(入门)
2020/04/15 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
事业单位请假制度
2014/01/13 职场文书
征婚广告词
2014/03/17 职场文书
校长创先争优承诺书
2014/08/30 职场文书
第一军规观后感
2015/06/12 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript