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 相关文章推荐
无闪烁更新网页内容JS实现
Dec 19 Javascript
js动画效果制件让图片组成动画代码分享
Jan 14 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
关闭页面window.location事件未执行的原因及解决方法
Sep 01 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
Oct 15 jQuery
简单的Vue异步组件实例Demo
Dec 27 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
Aug 24 Javascript
JavaScript类型相关的常用操作总结
Feb 14 Javascript
vue实现可移动的悬浮按钮
Mar 04 Vue.js
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
玩转图像函数库―常见图形操作
2006/09/03 PHP
使用 MySQL Date/Time 类型
2008/03/26 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
php生成随机数的三种方法
2014/09/10 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
详解php中 === 的使用
2016/10/24 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
python条件和循环的使用方法
2013/11/01 Python
在Python中使用成员运算符的示例
2015/05/13 Python
python爬取51job中hr的邮箱
2016/05/14 Python
浅谈Django REST Framework限速
2017/12/12 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
全面分析Python的优点和缺点
2018/02/07 Python
西班牙手机之家:Phone House
2018/10/18 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
市场专员岗位职责
2014/02/14 职场文书
心理健康日活动总结
2014/05/08 职场文书
运动会演讲稿300字
2014/08/25 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
关于python类SortedList详解
2021/09/04 Python
如何使用SQL Server语句创建表
2022/04/12 SQL Server