`

Extjs 根据 store返回数据 动态创建图表

阅读更多
根据store后台返回数据,动态创建图表类型,以及图表对象中包括的柱形,线性等等对象。暂时只支持柱形、和线性图表。
/**
 * Extjs4 动态创建图表
 * author:shangql
 * date:2012.12.12
 */

/**
 * 判断空如果为空返回true
 * 
 * @param obj
 * @returns {Boolean}
 */
function isEmpty(obj){
	if(typeof(obj) == 'undefined' || obj == ''){ 
		return true;
	}
}




/**
 * 创建刻度引用字段
 * @param num
 * @returns {Array}
 */
function newNumericFields(num){
	var fieldsArr = new Array();
	for ( var i = 1; i <= num; i++) {
		fieldsArr.push('data'+i);
	}
	return fieldsArr;
}

/**
 * 创建数据集引用字段
 * @param num
 * @returns {Array}
 */
function newStoreFields(num){
	var fieldsArr = new Array();
	fieldsArr.push("name");
	for ( var i = 1; i <= num; i++) {
		fieldsArr.push('name'+i);
		fieldsArr.push('data'+i);
	}
	return fieldsArr;
}


/**
 * 创建Y坐标轴
 * 
 * @param position
 *            坐标轴显示位置(left;right)
 * @returns 坐标轴对象
 */
function newNumeric(position){
	var Numeric = { 
		type: 'Numeric',
	    minimum: 0,
	    position: position,
	    fields: ['data1','data2','data3','data4','data5','data6','data7','data8','data9'],
	    minorTickSteps: 9,
	    majorTickSteps:9,
	    grid: {
	        odd: {
	            opacity: 1,
	            fill: '#ddd',
	            stroke: '#bbb',
	            'stroke-width': 0.5
	        }
	    },
	    grid:true,
	    label:{
			 renderer:function(v){
	    		return Ext.util.Format.round(v,2);
			},
	       font: '10px Arial'
			}
	    };
	    return Numeric;
}

/**
 * 创建X坐标轴
 * 
 * @param position
 *            坐标轴显示位置(top;bottom)
 * @param title
 *            坐标轴显示标题(可以是'')
 * @returns 坐标轴对象
 */
function newCategory(position,title){
	var Category = {
        type: 'Category',
	    position: position,
	    title: title,
	    fields: ['name'],
	    label: {
			font: '9px Chancery'
	        }
	    };
	    return Category;
}

/**
 * 创建柱
 * @param position 线的轴刻度显示位置(left;right)
 * @param tips 鼠标滑过图表显示的lable引用的字段
 * @param title 图表图例汉字标题
 * @param renderer 鼠标滑过图表显示的lable的单位
 * @returns 柱形对象
 */
function newColumn (position,tips,title,renderer){
	var column = {
		type: 'column',
        axis: position,
        highlight: {
			stroke:'green'
			},
        tips: {
          trackMouse: true,
          width: 140,
          height: 28,
          renderer: function(storeItem, item) {
            if(isEmpty(renderer)){
    			this.setTitle(storeItem.get('name') + ': ' + storeItem.get(tips));	
    		}else{
    			this.setTitle(storeItem.get('name') + ': ' + storeItem.get(tips) + renderer );
    		}
          }
        },
        style:{
			width:40
		},
        label: {
          display: 'insideEnd',
          'text-anchor': 'middle',
            field: '',
            renderer: Ext.util.Format.numberRenderer('0'),
            orientation: 'vertical',
            color: '#333'
        },
        title:title,
        xField: 'name',
        yField: tips
		};
	return column;
}

/**
 * 创建线
 * @param position 线的轴刻度显示位置(left;right)
 * @param tips 鼠标滑过图表显示的lable引用的字段
 * @param title 图表图例汉字标题
 * @param renderer 鼠标滑过图表显示的lable的单位
 * @returns 线形对象
 */
function newLine (position,tips,title,renderer){
	var line = {
		type: 'line',
        highlight: {
            size: 7,
            radius: 7
        },
        axis: position,
        smooth: true,
        fill: false,
        title:title,
        xField: 'name',
        yField: tips,
        markerConfig: {
            type: 'circle',
            size: 4,
            radius: 4,
            'stroke-width': 0
        },
        style: {
            'stroke-width': 3,
            fill: false,
            opacity: 0.2
        },
        tips: {
              trackMouse: true,
              width: 140,
              height: 28,
              renderer: function(storeItem, item) {
        		if(isEmpty(renderer)){
        			this.setTitle(storeItem.get('name') + ': ' + storeItem.get(tips));	
        		}else{
        			this.setTitle(storeItem.get('name') + ': ' + storeItem.get(tips) + renderer );
            		}
                  }
            }
		};
	return line;
}


/**
 * 画图表
 * @param store 数据集
 * @param category 样式种类
 * @param title 标题
 * @param seriesType 图表类型 column;line(暂时 只支持 柱形,线形)
 * @param renderer 渲染单位 可以为''
 * @returns
 */
function drawChart(store,category,title,seriesType,renderer){
	// 轴线数组
	var axes = new Array();
	// 图表类型数组
	var series = new Array();
	
	//============实例化轴============
	// y左坐标轴
	var leftNumeric = newNumeric('left');
	var bottomTitle = title + "分析指标";
	// x底部坐标轴
	var bottomCategory = newCategory('bottom',bottomTitle);
	
	// 添加到轴线数组,y左右坐标轴
	axes.push(leftNumeric);
	axes.push(bottomCategory);
	
	//判断图表类型
	if(seriesType == 'column'){
		// 实例化柱形图
		var column = newColumn('left','data1',title,renderer);
		series.push(column);
	}else if(seriesType == 'line'){
		// 实例化线形图
		var line = newLine('left','data1',title,renderer);
		series.push(line);
	}
	
	
	// 创建图表对象
	var chart = Ext.create('Ext.chart.Chart', {
        xtype: 'chart',
        width: $(window).width(),
        height: $(window).height() * 0.9,
        style: 'background:#fff',
        animate: true,
        shadow: false,
        store: store,
        theme: category,
        insetPadding: 50,
        legend: {
            position: 'right'
        },
        axes: axes,
        series: series
    });	
	
   // 返回图表对象
   return chart; 
}

分享到:
评论

相关推荐

    Extjs4Charts图表

    - 可以利用Ext JS的API动态更新图表,例如改变数据源或调整配置。 - 利用Tips和事件监听器可以增加交互性,为用户提供更丰富的信息。 总结,Ext JS 4 Charts 提供了一套强大且灵活的工具来创建各种类型的图表。...

    extjs 图表制作

    - 图表的基础元素包括系列(series)、轴(axes)、图例(legend)和提示(tooltip)等,这些都是创建图表的核心部分。 2. **创建图表** - 首先,你需要在HTML页面中引入ExtJS库和图表相关的CSS及JavaScript文件...

    ExtJs 连接数据库并且生成动态树

    它提供了一整套组件和功能,包括布局管理、数据绑定、图表、表格等,使得开发者能够创建交互式、高性能的用户界面。在“ExtJs 连接数据库并且生成动态树”这个主题中,我们将探讨如何利用ExtJs来连接后端数据库,并...

    extjs读取解析后端json格式数据显示条形图

    在本案例中,我们将深入探讨如何使用ExtJS读取并解析后端返回的JSON格式数据,然后将这些数据呈现为动态的条形图,以实现吸引用户注意力的视觉效果。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据...

    extjs实现动态树

    它提供了一整套组件库,包括用于创建复杂布局、数据绑定、图表以及我们关注的“动态树”功能。动态树(Dynamic Tree)是指在运行时可以动态加载、添加、删除或更新节点的树形控件。在ExtJS中,这种功能主要通过`Ext....

    Extjs 雷达图表初始化渲染 x轴数据

    总结起来,初始化并渲染一个ExtJS雷达图表,关键在于理解数据模型(store)、系列(series)配置以及轴(axes)的设定。通过合理的配置,我们可以有效地展示复杂数据,为用户提供直观的可视化体验。在实践中,不断...

    extjs实现动态树加载菜单

    它提供了丰富的组件库,包括数据绑定、布局管理、图表以及我们今天要讨论的重点——动态树形菜单。动态树加载菜单是 ExtJS 中一种常见且实用的功能,它允许用户在需要时按需加载树节点,从而提高应用性能,减少初次...

    Extjs4.2 Chart柱状图

    它提供了丰富的组件库,包括图表(Chart)功能,让开发者能够创建交互式的、数据驱动的可视化元素。在4.2版本中,ExtJS 的图表功能得到了进一步的增强,为用户提供了多种图表类型,其中柱状图(Bar Chart)是常用的...

    EXTJS 折线 chart action 代码示例

    在EXTJS中,可以创建一个Store对象来管理数据。数据可以是静态的,也可以动态从服务器加载。 2. 创建模型(Model):定义store中数据字段的结构。这有助于保持数据的一致性和完整性。 3. 创建chart:定义图表的...

    extjs网页控件开发

    例如,你可以创建一个动态更新的数据图表,展示实时销售数据或股票走势,使用户能直观地了解信息变化。 接下来,我们讨论多级联动下拉列表框控件。这种控件在许多数据筛选和导航场景中非常常见。在一级、二级、三级...

    EXTJS与.NET开发

    9. **EXTJS Charts与.NET图表控件**:EXTJS的图表组件能够生成各种复杂的数据可视化图表,与.NET的图表控件相比,EXTJS的图表更加动态和交互性更强。 10. **EXTJS Theming与.NET皮肤设计**:EXTJS允许开发者自定义...

    ASP.NET结合EXTJS动态生成Grid列表的例子程序源码

    EXTJS则是一个前端JavaScript库,它提供了丰富的用户界面组件,如数据网格(Grid)、图表、表单等,能够创建高度交互的Web应用。这个例子程序源码主要展示了如何将两者结合,动态生成Grid列表。 在ASP.NET中,...

    ExtJs4.0官方版本

    ExtJS 4.0提供了一套丰富的组件库,包括表格、面板、表单、树形结构等,所有组件都可以动态创建和修改。这使得开发者可以构建高度交互和可配置的用户界面。 4. Store管理 Store是ExtJS 4中处理数据的主要对象,它...

    ASP.NET 调用EXTJS

    EXTJS以其丰富的用户界面组件、数据网格、图表以及强大的布局管理而闻名,而ASP.NET则提供了稳定的后端服务支持。下面我们将深入探讨这个主题。 首先,EXTJS是一个基于JavaScript的前端框架,主要用来构建富互联网...

    ExtJS Chart 扩展 - 增加对数据的过滤等操作

    在实际开发中,结合这些知识点,你可以实现一个动态的、响应用户输入的图表组件,用户可以根据需求选择显示的数据部分,同时保持图表的清晰性和易读性。这不仅提高了用户体验,也有助于数据分析和决策制定。为了实现...

    extjs做界面的jsp系统

    - 结合Servlet和JSP,Struts可以接收前端ExtJS发送的Ajax请求,处理业务逻辑,并返回JSON或XML数据,更新前端界面。 3. **MySQL数据库**: - MySQL是一个关系型数据库管理系统,广泛应用于Web应用开发,具有高...

    EXTjs4.2中文版

    EXTjs4.2中的图表组件得到了显著提升,提供了丰富的图表类型,包括柱状图、饼图、线图等,可以动态展示和交互,为数据分析和可视化提供了强大的工具。此外,4.2版本还改进了表格组件,增加了行编辑、列拖动等功能,...

    ExtJS 实用教程

    7. **图表组件**:ExtJS的图表组件能生成各种类型的图表,如柱状图、饼图、线图等,适合数据可视化需求。 8. **Ajax通信**:ExtJS内置了Ajax功能,可以方便地进行异步请求,与服务器进行数据交换。 9. **事件处理*...

    extjs3.2资源压缩包

    11. **图表组件**:虽然不是ExtJS 3.2的核心部分,但通过EXTJS的Charting库,可以创建各种数据可视化图表,如柱状图、饼图、线图等。 12. **JSP集成**:在描述中提到的"js+jsp实现功能",表明此压缩包可能包含与...

    ExtJs实例,富客户端技术经典

    6. **图表和图形**:通过ExtJS的Charts模块,开发者可以创建各种数据可视化图表,如柱状图、折线图、饼图等,帮助用户更好地理解和解析数据。 7. **触摸友好**:随着移动设备的普及,ExtJS还提供了Ext JS Touch版本...

Global site tag (gtag.js) - Google Analytics