echarts对于大数据处理后绘制折线图,柱形图等等的效果和速度都很好。下面我们介绍 怎么把封装的数据列表解析出来,动态绘图,并且实现鼠标联动效果
引入js文件:

  <script type="text/javascript" src="js/jquery-1.12.3.min.js"></script><script type="text/javascript" src="js/echarts.js"></script>

css样式:

 #main{min-height:200px;max-height:4010px;margin:0 auto;overflow:overlay; white-space:nowrap;position: relative;}

页面元素:

 <div style="background: red;height: 20px;width: 100px" id="come">开始点击</div><div id="main"></div>

js造假数据: 可以模仿后台封装数据

var a=[{"F_X":["2017-3-1","2017-3-15","2017-4-1","2017-4-12","2017-5-21","2017-6-5","2017-8-12","2017-9-1","2017-10-11"],"F_Y":[{"name":"温度","type":"line","symbol":"emptycircle","data":["23","56","32","41","32","45","39","47","58"]},{"name":"压强","type":"line","symbol":"emptycircle","data":["233","345","322","251","342","350","233","279","228"]}],"F_Z":"A"},{"F_X":["2017-3-1","2017-3-15","2017-4-1","2017-4-12","2017-5-21","2017-6-5","2017-8-12","2017-9-1","2017-10-11"],"F_Y":[{"name":"温度","type":"line","symbol":"emptycircle","data":["34","45","32","25","57","45","39","47","58"]},{"name":"压强","type":"line","symbol":"emptycircle","data":["345","345","322","251","373","350","290","279","228"]}],"F_Z":"B"},{"F_X":["2017-3-1","2017-3-15","2017-4-1","2017-4-12","2017-5-21","2017-6-5","2017-8-12","2017-9-1","2017-10-11"],"F_Y":[{"name":"温度","type":"line","symbol":"emptycircle","data":["23","56","32","25","57","45","39","47","58"]},{"name":"压强","type":"line","symbol":"emptycircle","data":["33","45","32","51","73","50","90","79","48"]}],"F_Z":"C"}];

js 开始部分:

 require.config({paths: {echarts: 'http://echarts.baidu.com/build/dist'}});  $("#come").click(function(){var   div1='<div class="jin" style="height:150px;background: blue;"></div>';var   sv="", //动态生成名称mdataeahars=[];   //创建一个echarts对象集合$.each(a,function(i,t){$("#main").append(div1);   //添加生成图的元素sv="myChart"+i;youjin(i,t,sv,mdataeahars,a.length);             });   var time2= setInterval(function(){if(mdataeahars.length==a.length){                var  sokf; // 接临时删除的数据$.each(mdataeahars,function(i,t){if(mdataeahars.length==a.length){sokf=mdataeahars[0];var  em=arydlt(mdataeahars[0],mdataeahars);mdataeahars.push(sokf);linkage(mdataeahars[mdataeahars.length-1],em); }                            });clearInterval(time2) ;}},500)              });

上面这段代码中,有个监听方法,之所以这么搞,是因为这是联动的核心方法,它把多个独立的初始化之后的echarts对象,用数组装起来,然后用linkage()逐一去分配;用connect方法把除了自身对象之外的数组联动起来,这样就形成动态的相互关联;本方法中有个splice(i, 1)删除元素时,影响了初始的数组,即使你只是在调用方法,需要重新把该元素添加进去。当然你们可以用slice()这个方法也行,它不影响初始数组。

下面重点来了:

function youjin(item,th,tempmyech,mdataeahars,alength){  var  t=th,dtshow=false,ittep=item+1,  legendshow=false;if((alength%2==0 && ittep==alength/2) || (alength%2==1 && ittep==(alength+1)/2)){dtshow=true;}if(item==0){legendshow=true;}require(['echarts','echarts/chart/bar', // 使用柱状图就加载bar模块,按需加载'echarts/chart/line'],function (ec){ tempmyech = ec.init($(".jin")[item]);  // 基于准备好的dom,初始化echarts实例 tempmyech.setTheme("macarons");var sj=[], //名称集合f_y=t.F_Y,forstr="{b0}",colors=['#ff7f50','#87cefa','#da70d6','#32cd32','#6495ed','#ff69b4','#ba55d3','#cd5c5c','#ffa500','#40e0d0','#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700','#6699FF','#ff6666','#3cb371','#b8860b','#30e0e0'];for(var i=0;i<f_y.length;i++){sj.push(f_y[i].name);forstr+= "<br/><font color="+colors[i]+">&nbsp;●&nbsp;</font>{a"+i+"} : {c"+i+"}"}   //匹配数据 var option = {/* title: {    //图表标题text: '数据图'}, */tooltip: {         trigger: 'axis', //坐标轴触发提示框,多用于柱状、折线图中
                        formatter:forstr ,axisPointer: {type: 'cross'}},grid: {        //空值形成图形的大小和位置y:25,left: '3%',right: '4%',height:"64%",containLabel: true},dataZoom : {    //放大缩小轴y:130,show : dtshow,realtime: true,height:15,start : 0,end : 100},toolbox: {    //工具栏显示             show: true,
                        feature: { mark : {show : false,title : {mark : '辅助线开关',markUndo : '删除辅助线',markClear : '清空辅助线'},lineStyle : {width : 2,color : '#1e90ff',type : 'dashed'}},dataZoom : {show : legendshow,  //legendshow
                                title : {dataZoom : '区域缩放',dataZoomReset : '区域缩放后退'}},dataView : {show : true,   //legendshowtitle : '数据视图',readOnly: false,lang: ['数据视图', '关闭', '刷新']},magicType: {show : true,  //legendshow
                                title : {line : '折线图切换',bar : '柱形图切换',stack : '堆积',tiled : '平铺',force: '力导向布局图切换',chord: '和弦图切换',pie: '饼图切换',funnel: '漏斗图切换'},  option: {// line: {},
                                 bar: {barWidth:40,  //柱宽barMinHeight:2,  //最小柱高//barGap:'5%' ,  //柱间距离,默认30%barCategoryGap:'5%'  //类目间柱形距离,默认为类目间距的20%
                                }// stack: {...},// tiled: {...},// force: {...},// chord: {...},// pie: {},// funnel: {...}
                                },type : ['line', 'bar', 'stack', 'tiled'] }, restore : {show : legendshow,  //
                                title : '还原'},           saveAsImage: { show:legendshow ,title : '保存为图片',type : 'png',lang : ['点击保存']        //显示“另存为图片”工具*/
                            }}},xAxis: {type: 'category',position:'bottom',boundaryGap : true,axisTick: {onGap:false},splitLine: {show:false},data: t.F_X    //填入X轴数据
                    },color:colors,legend: {    //图表上方的类别显示
                        show:legendshow,data:sj,textStyle: {fontSize: 12,color: '#000'}},series: t.F_Y,yAxis : [
                                {//第一个(左边)Y轴,yAxisIndex为0type : 'value',name : t.F_Z,axisLabel : {formatter: '{value} '    //控制输出格式
                                     }}                 ]};   tempmyech.showLoading();    //数据加载完之前先显示一段简单的loading动画tempmyech.hideLoading();    //隐藏加载动画tempmyech.setOption(option);    //载入图表
                mdataeahars.push(tempmyech);})}

这里着重说明下:require这个的作用,是用来添加js类的;假如你不用做联动,那么你可以不用它,我最早参考的博客如:http://www.cnblogs.com/Dreamer-1/p/5530221.html
而你在做联动时必然会抛弃一部分的功能。代码最开始的require.config({path:{}})是定义总路径,而之后的require([ ]  , function(ec){}),数组中传入你需要的js类库,(之前有人测试说可以传入空值),但是我测试是不行的,必须要有echarts类和你所需用的图类。而这个参数ec,就是不用require时,所用的echarts对象。所以你要是用.connect( [ ])方法做联动还是写上require()这种方式吧。这里先介绍.connect( [ ])方式吧好,我们继续下一步:js调用的其他函数代码

//联动数组function  linkage(mit ,em){mit.connect(em);}//去除元素function  arydlt(item,arr){var dtemparr=arr||[];dtemparr.remove(item);return  dtemparr;}
Array.prototype.remove= function(val) {for(var i=0; i<this.length; i++) {if(this[i] == val) {this.splice(i, 1);break;}}
}

代码到这里基本结束,点击按钮后,我们看看效果如何:

为了方便大家深入研究,我在封装option这个对象时,加入了很多参数和一些常用的工具菜单栏选项。因为我学习使用时网上的资料杂七杂八,所以觉得有必要给大家一个快速掌握常用的功能实现,比如放大缩小滚动条的位置和高度,图之间的间距等等。还给大家做好了鼠标点击时动态显示的样式同步效果。

2.2.7版本,源码文件地址:https://files.cnblogs.com/files/mobeisanghai/link-all.rar

以上方法是版本2.27,好久没更新文档了,下面分享3.X以上版本的文件,方法更加高效,简洁。直接给源码,下载地址:https://files.cnblogs.com/files/mobeisanghai/link1.rar

本例的缺点:引入的是百度提供的echart插件,http://echarts.baidu.com/build/dist/echarts.js,有部分功能未能实现(比如那个截图功能截出的是空白页面,当然你也可以参考我的上上一篇关于js对div的截图,http://www.cnblogs.com/mobeisanghai/p/7682463.html)。

下面分享4.X版本的新内容,简单暴力,多图用一个canvas,提高绘图效率

源码地址:https://files.cnblogs.com/files/mobeisanghai/link4.0.rar

核心解释:这里用到一个坐标轴指示器(axisPointer)的全局公用设置,很全面,想深入了解的同学可以去看百度api配置文档。

axisPointer: {
  link:[
  {xAxisIndex: "all"}], //link 是一个数组,其中每一项表示一个 link group,一个 group 中的坐标轴互相联动
  label: {
    backgroundColor: '#777'
  }
},

博文出处:http://www.cnblogs.com/mobeisanghai/p/7683158.html,如有转载请标明文章出处

转载于:https://www.cnblogs.com/mobeisanghai/p/7683158.html

用echartsjs 实现动态绘制折线、柱状等图形,并实现多图联动效果相关推荐

  1. 微信小程序:wx-charts动态绘制折线图

    微信小程序:wx-charts动态绘制折线图 wx-charts是基于 Canvas的微信小程序主流图表工具,体积小易操作,支持多种图表的绘制,这里主要就动态绘制折线图做出详解,所谓动态,指的是表格的 ...

  2. canvas动态绘制折线图

    公司的实践课题vue项目,用折线图展示近六个月的收入和支出,以前看到图表,第一个想到的就是从echarts官网调用,但这次导师建议我们用canvas去画,然后去封装,这样可以加大课题难度,同时理解底层 ...

  3. iOS 使用Charts框架 折线,柱状,K线,饼状,雷达全攻略

    我是前言: 大约几个月前我写了一篇文章, 文中简单地介绍了Charts两种图表的样式的使用, 不过有种意犹未尽的感觉, 利用周末的空闲时间再次看了看, 有了新的收获, 今天发出来,分享给大家, 来稍加 ...

  4. 动态绘制柱状图饼状图

    http://www.cnblogs.com/haian/archive/2009/12/08/1619751.html 转载于:https://www.cnblogs.com/modernsky20 ...

  5. Axure原型创建折线、柱状等图形,引用echarts

    1.在echarts网站选择对应的统计图形: 网址:Examples - Apache ECharts 2.对代码进行编辑,使其适配自己的业务. 3.在Axure中创建一个基本元件矩形.命名为:tes ...

  6. matplotlib画图-折线/散点/柱状/条形图

    1 折线图 [绘图]: plt.plot(x,y):x,y的位置绘制两个折线,并设置不同样式: plt.plot([位置1], 值1,'样式1', [位置2], 值2,'样式2') 或者,重复: pl ...

  7. VML 画统计 柱状、饼图、折线

    <!-- --> <!-- 涉及文件 alt.js / function.asp--> <!-- 必须包含页面所有代码 --> <!-- 高度定义有待改进 c ...

  8. python横向柱状图-python绘制横向水平柱状条形图Bar

    python绘制横向水平柱状条形图Bar import matplotlib import random import matplotlib.pyplot as plt # 中文乱码和坐标轴负号处理. ...

  9. 柱状折线图2-双柱状重合堆积折线-重写图例点击事件

    本例子: 使用了formatter方法重写了提示层的展示数据 使用了双x轴实现重合 使用了stack实现堆积 使用了legendselectchanged和dispatchAction重写了图例点击事 ...

最新文章

  1. python 三分钟入门_Cython 三分钟入门教程
  2. JNI 实战全面解析
  3. 基于BootStrap 4.x 中的Flex 实现各种布局
  4. EMR集群安全认证和授权管理
  5. SAP Spartacus后台CMS Component和Angular Component的映射关系
  6. java获取ram_Java:ChronicleMap第2部分,超级RAM映射
  7. 京东健康股价创下新高 市值突破6000亿港元
  8. java远程执行命令报错java.io.IOException: Cannot run program “ifconfig“: error=2, No such file or directory
  9. Nginx网站根目录更改及导致403 forbidden的问题解决
  10. (转)WriteOnce and RunAnyWhere
  11. lwip协议栈在linux运行,一种轻量级的TCP_IP协议栈LwIP在嵌入式系统中的应用
  12. 【父亲节H5】用独特的方式表达最深沉的爱!
  13. python 特征选择卡方_文本特征选择(信息熵、Gini、IV、卡方值)
  14. Java——图形 继承Shapes(形状)计算周长,面积。
  15. [资源]C++ 程序员必收藏
  16. 编写程序FooBizBaz.java,从1循环到150并且在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
  17. android 盒子刷机,一加5刷机盒子
  18. C++:map.insert插入重复键(已存在键)将忽略,而非值覆盖
  19. 考研线性代数深入理解
  20. 情人节 玫瑰花表白源码

热门文章

  1. 分水岭:知识的深度拓展
  2. easyUI,radio控制select
  3. (基础)Promise的resolve参数
  4. System.Reflection.TargetParameterCountException”类型的异常 参数计数不匹配
  5. HTML链接CSS的方法
  6. echarts实现双y轴
  7. 《UE4游戏开发》之 《画质控制》
  8. 语音识别入门第七节:语言模型
  9. 企业面临的7大数据分析挑战
  10. 学计算机动漫设计软件,动漫设计需要学习哪些软件?