云服务器

Echarts基础图表 -- 柱形图

2017-06-23 10:47:24 0

首先老规矩,在使用Echarts时,要先引用Echarts,此时我们有两种方式(上次忘了说一下了,这次补上),一种是标签化单文件引入,介绍曲线图的时候就是用这种方式,第二种就是用模块化单文件引入,cmd或者amd都可以,但是需要注意的是Echarts默认是amd,如果需要cmd引入,需要将它进行cmd模块化后再引入。在这里为了方便,我们还是选择第一种方法引入Echarts文件。


<script type="text/javascript" src="js/echarts3.js" ></script>

引用图表库后,我们先创建个div作为容器,该容器将会挂载绘制的图表,然后我们设置一下宽高,需要注意的是,如果容器是隐藏的话,Echarts可能会获取不到容器的宽高而导致初始化失败,此时,我们可以明确指定容器的width和height,或者在容器显示后手动调用Echarts的resize方法。


<div id="mycharts" style="width: 600px;height: 400px;"></div>

将当前容器传进去,创建一个Echarts实例


var mycharts = echarts.init(document.getElementById('mycharts'));

接下来是定义图表的配置项,在这里就要说一下我要做什么样的图表了,还记得前几天的NSA蠕虫病毒勒索事件吗,这次我打算做个柱形图统计下受到影响的各大机构个数、以及损失的金额(当然了,数据是非真实的),在做这个柱形图的时候,我们要注意的是,虽然这个柱形图仍然是两个维度x和y,但是因为要统计个数和金额,所以我们需要两个y轴。下面请看核心代码:


var option = {

title:{

text:'NSA永恒之蓝蠕虫病毒柱形图', //标题

subtext:'数据非真实',//副标题

left:'center'

},

legend:{

data:['波及总数量','损失总金额'],//图例名称,与数据列series中的name一一对应

top:'bottom'

},

tooltip:{

trigger:'axis',//设置提示框的触发类型为坐标轴触发

axisPointer:{//坐标轴指示器配置项(指示坐标轴当前刻度)

type:'shadow' //这里设置它的类型为阴影指示器

}

},

xAxis:{

type:'category',

data:['教育科研机构','医疗卫生机构','商业中心','交通运输机构','宗教设施']

},

yAxis:[//y轴 这里由于要统计人数跟金额,所以设置两条轴,series则可以设置轴的index值来使用相应的轴

{

name:'人数(个)',

splitLine:{//这是坐标轴在grid区域中的分割线,grid组件后续会介绍

show:false //这里由于每个y轴的刻度都会有一条分割线,横跨grid区域,而这里有两个y轴,导致线会比较乱,不利于用户观看,因此把它去掉

}

},

{

name:'金额(元)',

splitLine:{

show:false

}

}

],

series:[

{

type:'bar',//图表的类型

name:'波及总数量',// 图表的名字,也可以说是图表的系列名称,跟图例一一对应

yAxisIndex:0,//用哪条y轴

data:[4316,706,3014,2686,85]

},

{

type:'bar',

name:'损失总金额',

yAxisIndex:1,

data:[43161000,7064541,268610000,30141000,851100]

},

]

};

最后一步,设置图表配置项


mycharts.setOption(option);

这样,一个NSA永恒之蓝蠕虫病毒柱形图就出来了

pictrue1

但是其实我们还是可以对它进行进一步的优化,比如说提示框样子看起来不是很好看,我们优化一下它,增加以下代码:


backgroundColor:'#27727B',//修改背景颜色

padding:10,//加个内边距

formatter:function(params,ticket,callback){//格式化一下提示框的显示,这里用到了html的字符串拼接

var html = '';//html模板

if(params !== null){

html = '<span style = "font-size:16px;">'+ params[0].name +'</span><br/>';

for (var i = 0; i <= params.length - 1; i++) {

if(params[i].seriesIndex === 0){//数量

html += '<span style = "color:'+ params[i].color +';margin-right:5px;">\u25CF</span><span>'+ params[i].seriesName +':<b>'+ params[i].value +'</b> 人</span><br/>';

}else{//金额

html += '<span style = "color:'+ params[i].color +';margin-right:5px;">\u25CF</span><span>'+ params[i].seriesName +':<b>'+ params[i].value +'</b> 元</span><br/>';

}

}

}

setTimeout(function(){

callback(ticket,html);//拼接完模板后触发回调将模板传进去,然后更新提示框

},0);

}

或者我们可以修改下柱子的颜色


color:['#60C0DD','#F0805A','#F4E001','#D7504B','#C6E579']//加个全局颜色列表,echarts会从这个列表中依次循环取出颜色作为系列颜色

当然也可以修改形状,为series数据列中的每一个图表加上图形样式属性,修改下样式即可,比如加个圆角跟阴影


itemStyle:{

normal:{

barBorderRadius:[5,5,0,0],

shadowColor: 'rgba(0, 0, 0, 0.5)',

shadowBlur: 1

}

},

最后为了让用户一目了然,我们可以把柱形图的数据信息也显示在图表上,比如下面这样,在每个图表中加上图形文本标签属性,不过需要注意的是,因为柱形图之间间隙有限,如果有些数据信息比较长,那么就会发生重叠,所以显示与否还需要自己权衡。


label:{

normal:{

show:true,

position:'top',

formatter:'{b}\n{c}人'

},

}

刷新一下,我们就可以看到最终的图表出来了

pictrue2

下一篇: 无

微信关注

获取更多技术咨询