Echarts使用记录-实例
图片标记
Echarts中markPoint用于标记特定的数据,比如地图上的描点,折线图的最值点等.第二版的Echarts支持用图片做为标记样式,例如
markPoint : {
symbol: 'image:///assets/admin/images/details.png',
itemStyle:{normal:{label:{show:true,textStyle:{fontSize:'20'}}},emphasis:{label:{show:false}}},
data : [
{name : '详情', x:'10%', y:50, symbolSize:25}
]
}
markPoint 二级元素,在series内部
数据区域缩放
数据区域缩放可以让一个宽度固定的图表显示大量的数据,尤其是柱状图和折线图,可以通过拖动下方的按钮显示一定区域内的数据.
dataZoom:{
orient:"horizontal", //横向
show:true,
start:0, //默认起始点
end:70 //默认结束点
},
dataZoom 一级元素,在option内部
动态添加数据
某些应用场景需要实时显示数据,后端通过长连接发送数据,前端可利用Echarts的接口对图表数据进行更新,如下
var axisData
timeTicket = setInterval(function (){
axisData = (new Date()).toLocaleTimeString().replace(/^\D*/,''); //获取当前时间
myChart.addData([
[
0, //数据系列索引(指定更新图表中哪条数据系列)
Math.round(Math.random() * 100), //y轴的值
true, //是否删除原有数据,因为数据不断增加而宽度不变,一般选择true
false, //从队列尾部插入
axisData //x轴标签
]
]);
}, 800);
myChart变量即为前面为指定dom初始化时赋值的变量,因此这段代码加在myChart.setOption(option)之后 延迟时间不能过短
双纵轴
一张柱状图或折线图通常会显示多条数据系列,但是图表最多支持两条横向坐标轴和两条纵向坐标轴,我们可以给不同坐标轴指定单位和数据系列
yAxis : [
{
type : 'value'
},
{
type : 'value'
}
],
series : [
{
name:'总支出',
type:'line',
data:{{imlist}},
},
{
name:'支出',
type:'bar',
data:{{imlist}},
yAxisIndex: 1, //就是这里
}
]
关键在于series里有一组数据包含参数yAxisIndex
绑定事件(图表交互)
Echarts支持事件接口,这里是官方提供的调试页面. 举个例子
var ecConfig = require('echarts/config');
myChart.on(ecConfig.EVENT.CLICK, function(param){
var temp="";
for(var i in param){
temp += i+":"+eval("param."+i)+"\n";
}alert(temp);
});
这是一个单击事件,显示这次事件获取的变量名和数值,我们可以通过检测变量名得知用户单击了图表的哪个部分,并由此指定响应事件.,比如
var ecConfig = require('echarts/config');
myChart.on(ecConfig.EVENT.CLICK, function(param){
for(var i in param){
if(eval("param."+i) == '详情'){
window.location.href = '/admin/cost_month'
}
}
});
用户点击’详情’就会跳转到详情页,这里的’详情’是饼图的一个markPoint.
绘图网格(图表区域)
Echarts图表被包装在一个指定高度的容器中,有时候图表显示的大小并不满足我们的需要,比如数据很多时,我们会把整个容器填满,减少空白区域,充分利用空间.此时需要指定grid参数
grid: {
x:'10%',
y:'15%',
x2:'5%',
y2:'25%'
},
x,x2,y,y2分别指横向和纵向方向的起始和结束坐标,支持的单位为px(数字类型),百分比(字符类型,如上) x2和y2是相对容器右(底)端的坐标,如上面例子中,图表横向宽度为容器宽度的85%. 当然也可以指定x和width两个参数以及y和height实现同样的效果
多图联动
多图联动的例子可以看这里.我这里只截取关键部分.
option = {
....
legend: {
data:['上证指数','虚拟数据']
},
series:[
{
name:'上证指数',
type:'k',
data:[ // 开盘,收盘,最低,最高
[2320.26,2302.6,2287.3,2362.94],
]
},
{
name:'虚拟数据',
type:'bar',data:[]
}
]
.....
}
option2 = {
....
legend: {
data:['上证指数','虚拟数据'],
y: -30 //将图例遮起来
}
series: [
{
name:'虚拟数据',
type:'bar',
symbol: 'none',
data:[
560434
],
}
]
....
}
myChart1 = echarts.init(document.getElementById('DOMID1'));
myChart1.setOption(option1);
myChart2 = echarts.init(document.getElementById('DOMID2'));
myChart2.setOption(option2);
myChart1.connect(myChart2);
myChart2.connect(myChart1);
多图联动的一个关键是legend需是相同的,然后第一个图表中series也需将后面图表数据系列的参数加进来(可以不加数据),最后将两个图表connect起来.