extjs4图表绘制之折线图实现方法分析


Posted in Javascript onMarch 06, 2020

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

本篇文章将介绍extjs中自带的图表

在本次案例中,提供一下功能:

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

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

请看下面代码:

Ext.define('ChartLineTest', {
  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;//赋值给selectYear属性
            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//赋值给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: 'line',
        highlight: {
          size: 7,
          radius: 7
        },
        fill: false,
        // showInLegend:false,//要是为false 在坐标系中将不显示标记
        axis: 'left',
        xField: 'statTime',
        renderer: Ext.util.Format.dateRenderer('Y-m '),
        yField: 'activeCount',
        title :'活跃用户',
        //定义浮标(提示框) 显示想要显示的文字
        tips: {
          trackMouse: true,
          width: 200,
          height: 40,
          renderer: function(storeItem, item) {
            this.setTitle( "人数:"+storeItem.get('activeCount')+",占比:"+storeItem.get('effectiveProportion') );
          }
        },
        label: {
          display: 'insideEnd',
          field: 'activeCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'vertical',
          font:'15px Helvetica, sans-serif',
          'text-anchor': 'end',
          color:'red',
        },
        markerConfig: {
          type: 'cross',
          size: 3,
          radius: 3,
          'stroke-width': 0
        }
      },
      {
        type: 'line',
        highlight: {
          size: 7,
          radius: 7
        },
        // selectionTolerance:0,

        axis: 'left',
        title :'有效用户',
        fill: false,
        xField: 'statTime',
        renderer: Ext.util.Format.dateRenderer('Y-m '),
        yField: 'effectiveCount',

        markerConfig: {
          type: 'circle',
          size: 3,
          radius: 3,
          'stroke-width': 0
        },
        /* style: {
          color: '#6666CC'
        },*/
        style: {
          stroke: '#00ff00',
          /* 'stroke-width': 10,
          fill: '#80A080',
          opacity: 0.2*/
        },
     /*   label: {
          display: 'middle',
          field: 'effectiveCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'vertical',
          font: '15px Helvetica, sans-serif',
          'text-anchor': 'end',
          color: 'red',
          minMargin:100,
        },*/
        //定义坐标上的文字的属性
        label: {
          display: 'over',
          field: 'effectiveCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'vertical',//数值显示的方式 ‘horizontal'水平显示
          font: '15px Helvetica, sans-serif',
          'text-anchor': 'start',
          color: 'red',//字体 颜色
          //对坐标上的文字进行操作,当数值大于5000的时候显示另一种颜色
          renderer: function(value, label, storeItem, item, i, display, animate, index) {

            if (value >= 5000) {
              label.setAttributes({fill:'#080',});
              value = value;
            }
            return value;
          }
        }
      },

    ];
    return columns;
  }

});

extjs4图表绘制之折线图实现方法分析

每一个图表必须要三个组成部分: 数据(data), 轴(axes)和系列(Series)。

数据 -  是图表用来展示的信息,在Ext 中使用标准的Model 或是 Store.

 - 提供数据的来源,范围,规模和单位。组成图表的基本架构。 轴可以是笛卡尔坐标(x,y), 极性(或径向),或轨距(用于仪表盘图表的一维轴)。尽管一个结合多个类型系列的图表需要额外的轴定义,但大多数的图表还是使用一组轴。

系列- 这个属于是用于数据的图形渲染的。换句话说,就是一个图标的基本图形项目,像 线图,柱状图,栏位或饼图。一个图形可以包含多个系列。 例如: 在一个图形的中有三个线状图就包含有三个独立的线系列。

可以添加标签,标记和图例说明到图上;还可以设置动画效果或是放大某一个区块。

label(标签) -- 对一个轴或是系统的解释性标题。

marker(标记) -- 用来在一个系列中绘制数据点的一个符号,形状或是图片。

legend(说明) -- 提供图的说明,解释各变量在图形中代表的意义。(图例)

listeners(监听器)--等待某个事件并作出一些动作像鼠标事件等

animation( 动画)--  图的元素可以移动

tips(提示框)--  当鼠标放在坐标轴上显示的提示文字。

markerConfig--定义每一点坐标的形状。

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

Javascript 相关文章推荐
javascript实现的弹出层背景置灰-模拟(easyui dialog)
Dec 27 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
jquery点击切换背景色的简单实例
Aug 25 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
值得学习的bootstrap fileinput文件上传工具
Nov 08 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
vue 引用自定义ttf、otf、在线字体的方法
May 09 Javascript
js回调函数仿360开机
Dec 26 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 #Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 #Javascript
Vue Router 实现动态路由和常见问题及解决方法
Mar 06 #Javascript
Vue基于iview实现登录密码的显示与隐藏功能
Mar 06 #Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 #Javascript
javascript中可能用得到的全部的排序算法
Mar 05 #Javascript
js的Object.assign用法示例分析
Mar 05 #Javascript
You might like
JAVA/JSP学习系列之四
2006/10/09 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Python计算一个文件里字数的方法
2015/06/15 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python使用OpenCV进行标定
2018/05/08 Python
浅析Python四种数据类型
2018/09/26 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
人力资源主管的岗位职责
2014/03/15 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
小学教育见习报告
2014/10/31 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python