extjs4图表绘制之折线图实现方法分析
本文实例讲述了extjs4图表绘制之折线图实现方法。分享给大家供大家参考,具体如下:
本篇文章将介绍extjs中自带的图表
在本次案例中,提供一下功能:
1.从后端请求数据并运用到图表中,形成动态数据。
2.查询出每年各个月中人数。
请看下面代码:
Ext.define('ChartLineTest',{
extend:'Ext.panel.Panel',
autoScroll:true,
selectYear:null,//定义年份
initComponent:function(){//定义初始化组件
varme=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(){
varme=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(){
varme=this;
vartbar=[
{
xtype:'combo',
fieldLabel:'选择年份',
name:'selectYear',
queryMode:'local',
editable:true,
readOnly:false,
labelWidth:60,
width:200,
store:newExt.data.ArrayStore({
fields:['id','name'],
data:[]
}),
valueField:'name',
displayField:'id',
triggerAction:'all',
autoSelect:true,
listeners:{
beforerender:function(){
varnewyear=Ext.Date.format(newDate(),'Y');//这是为了取现在的年份数
varyearlist=[];
for(vari=newyear;i>=2015;i--){
yearlist.push([i,i]);
}
this.store.loadData(yearlist);
}
}
},
{xtype:'button',text:'查找',
listeners:{
"click":function(){
varvalue=Ext.ComponentQuery.query('[name=selectYear]')["0"].value;
me.selectYear=value;//赋值给selectYear属性
me.store.load();
}}}
];
returntbar;
},
createStore:function(){
//从后端请求数据
varme=this;
returnExt.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(){
varme=this;
varcolumns=[
{
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,
}
];
returncolumns;
},
createSeries:function(){
varme=this;
varcolumns=[
{
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:'15pxHelvetica,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:'15pxHelvetica,sans-serif',
'text-anchor':'end',
color:'red',
minMargin:100,
},*/
//定义坐标上的文字的属性
label:{
display:'over',
field:'effectiveCount',
renderer:Ext.util.Format.numberRenderer('0'),
orientation:'vertical',//数值显示的方式‘horizontal'水平显示
font:'15pxHelvetica,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;
}
returnvalue;
}
}
},
];
returncolumns;
}
});
每一个图表必须要三个组成部分:数据(data),轴(axes)和系列(Series)。
数据 - 是图表用来展示的信息,在Ext中使用标准的Model或是Store.
轴 -提供数据的来源,范围,规模和单位。组成图表的基本架构。轴可以是笛卡尔坐标(x,y),极性(或径向),或轨距(用于仪表盘图表的一维轴)。尽管一个结合多个类型系列的图表需要额外的轴定义,但大多数的图表还是使用一组轴。
系列- 这个属于是用于数据的图形渲染的。换句话说,就是一个图标的基本图形项目,像线图,柱状图,栏位或饼图。一个图形可以包含多个系列。例如:在一个图形的中有三个线状图就包含有三个独立的线系列。
可以添加标签,标记和图例说明到图上;还可以设置动画效果或是放大某一个区块。
label(标签)-- 对一个轴或是系统的解释性标题。
marker(标记) --用来在一个系列中绘制数据点的一个符号,形状或是图片。
legend(说明) --提供图的说明,解释各变量在图形中代表的意义。(图例)
listeners(监听器)--等待某个事件并作出一些动作像鼠标事件等
animation(动画)-- 图的元素可以移动
tips(提示框)-- 当鼠标放在坐标轴上显示的提示文字。
markerConfig--定义每一点坐标的形状。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript图片操作技巧大全》、《JavaScript切换特效与技巧总结》、《JavaScript运动效果与技巧汇总》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。