ExtJs的柱状图的画法其实与《【ExtJs】折线图》(点击打开链接)的画法几乎完全一样,难点在于各个柱子的颜色。ExtJs对于柱状图的颜色,并没有单独为其开放独立的参数。因此还是与《【ExtJs】表格控件Grid的增删改查,利用renderer让操作列actioncolumn使用文字而不是图标》(点击打开链接)一样,要自己单独设置东西,必须使用到渲染器。如果不设置,它画出来的柱状图,每次都是同样的颜色。
网上对于这部分东西的说明,仅有极少部分的资料。而且把代码写得天花龙凤,根本读不懂。下面使用一个极其简单的例子说明这个问题。
一、基本目标
绘制如下的柱状图,同时每条柱子不同颜色。
二、制作过程
首先还是与《【ExtJs】折线图》(点击打开链接)一样,定义一个模型,在此模型上建立数据中心store,数据中心的数据可以自己写,也可以从后端页面获取。
Ext.define('graphData',{ extend:'Ext.data.Model', fields:[ {name:'graphName',type:'string'}, {name:'graphData',type:'int'} ] }); var graphDataStore=Ext.create('Ext.data.Store',{ model:'graphData', data:[ {graphName:"A",graphData:700}, {graphName:"B",graphData:800}, {graphName:"C",graphData:600}, {graphName:"D",graphData:500} ] });之后先定义一个颜色数组,为下面的渲染色做好准备。
var colors = ['#6E548D','#94AE0A','#FF7348','#3D96AE'];最后,则绘制这个柱状图,渲染器放在series的属性项中:
var chart1 = new Ext.chart.Chart({ width: 480, height: 320, animate: true,//使用动画 store: graphDataStore, renderTo: Ext.getBody(), shadow: true,//使用阴影 axes: [{//x轴与y轴的声明 type: 'Numeric', position: 'left', grid: true }, { type: 'Category', position: 'bottom', fields: 'graphName' }], series: [{ type: 'column', axis: 'bottom', xField: 'graphName', yField: 'graphData',//x与y轴的数据声明 //此渲染器的存在能够使每条柱子的颜色,与上方声明的颜色数组相同 renderer: function(sprite, storeItem, barAttr, i, store) { barAttr.fill = colors[i]; return barAttr; } }] });
三、总结
因此,整个column.html页面代码如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>柱状图</title> <script type="text/javascript" src="../js/ext-all.js"></script> <script type="text/javascript" src="../js/bootstrap.js"></script> <script type="text/javascript" src="../js/ext-lang-zh_CN.js"></script> <link href="../ext-theme-classic/ext-theme-classic-all.css" rel="stylesheet" type="text/css"> </head> <body> </body> </html> <script> Ext.onReady(function(){ Ext.define('graphData',{ extend:'Ext.data.Model', fields:[ {name:'graphName',type:'string'}, {name:'graphData',type:'int'} ] }); var graphDataStore=Ext.create('Ext.data.Store',{ model:'graphData', data:[ {graphName:"A",graphData:700}, {graphName:"B",graphData:800}, {graphName:"C",graphData:600}, {graphName:"D",graphData:500} ] }); var colors = ['#6E548D','#94AE0A','#FF7348','#3D96AE']; var chart1 = new Ext.chart.Chart({ width: 480, height: 320, animate: true,//使用动画 store: graphDataStore, renderTo: Ext.getBody(), shadow: true,//使用阴影 axes: [{//x轴与y轴的声明 type: 'Numeric', position: 'left', grid: true }, { type: 'Category', position: 'bottom', fields: 'graphName' }], series: [{ type: 'column', axis: 'bottom', xField: 'graphName', yField: 'graphData',//x与y轴的数据声明 //此渲染器的存在能够使每条柱子的颜色,与上方声明的颜色数组相同 renderer: function(sprite, storeItem, barAttr, i, store) { barAttr.fill = colors[i]; return barAttr; } }] }); }); </script>