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 相关文章推荐
一起来写段JS drag拖动代码
Dec 09 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
Jan 09 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
Dec 02 Javascript
Bootstrap CSS布局之按钮
Dec 17 Javascript
JS库之Highlight.js的用法详解
Sep 13 Javascript
vue中的scope使用详解
Oct 29 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
jquery获取img的src值实例介绍
Jan 16 jQuery
vue 表单之通过v-model绑定单选按钮radio
May 13 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
Python图算法实例分析
2016/08/13 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
某科技软件测试面试题
2013/05/19 面试题
汽车检测与维修个人求职信
2013/09/24 职场文书
计算机应用与科学个人的自我评价
2013/11/15 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
安全宣传标语
2014/06/10 职场文书
数学教研活动总结
2014/07/02 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
Nginx反向代理配置的全过程记录
2021/06/22 Servers
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
Python os和os.path模块详情
2022/04/02 Python
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技