ECharts的学习 (三) :折线图的学习

    xiaoxiao2021-12-14  68

    之前在项目中利用canvas实现了折线图,在实现的过程中觉得过于繁琐,前两天看到Echarts这个插件,学习,模仿一下,中文学习网址:http://echarts.baidu.com/index.html 项目的需求为:当数据少于7个的时候,展现第一种样式,当数据多余7个的时候,采用第二种样式,如下图:

    实现的思路如下: 1.写出一条简单的折线图 2.修改折线图样式(7个点以内的样式和大于7个点的样式各来一个) 3.后期数据交互实现 4.完整代码

    最后实现效果如下(这里把折线改成了曲线):

    一.实现简单的折线图

    效果图如下: 实现一个基本的折线图代码如下: ——css—–

    <style type="text/css"> html,body{ margin:0; padding: 0; } .chartContainer{ width:100%; height:10rem; border:1px solid pink; box-sizing:border-box; } </style>

    —–html—–

    <body> <div class="chartContainer" id="chart1"></div> </body>

    ——js——

    <script type="text/javascript"> //初始化echarts实例 var chart1=$("#chart1").get(0); var myChart=echarts.init(chart1); var chartDate=[1,3,5,8,10,15,18,22,25,28,30]; //var weight=[55.4,55.9,53]; var weight=[55.4,55.9,53,56,57,58,56.7,53,55,54,53]; //对echarts做基础配置 option={ xAxis:{ data:chartDate }, yAxis:{ }, series:[ { name:"体脂", type:"line",//折线图,还有pie(饼状图), data:weight } ] } myChart.setOption(option); </script>

    二.修改折线图样式

    1:少于7个点的样式 最后实现效果如下图:

    <1>调整折线的折线颜色,隐藏x,y轴

    series:[ { name:"体脂", type:"line",//折线图,还有pie(饼状图), data:weight, lineStyle:{//线条颜色 normal:{ color: '#1daffa', } }, } ]

    <2>调整标注的颜色

    series:[ { name:"体脂", type:"line",//折线图,还有pie(饼状图), data:weight, lineStyle:{//线条颜色 normal:{ color: 'rgba(29, 175, 250, 0.3)', } }, itemStyle:{ normal:{ color: 'rgba(29, 175, 250, 0.3)', } } } ]

    <3>调整y轴,使y坐标轴从数据最小点开始(不是从0开始,从0开始数据域范围太窄)

    yAxis:{ min:"dataMin",//可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。 show:false },

    <4>调整标注样式

    本来是打算用代码实现外面是半透明,里面是蓝色实心的样式,但是没有找到设置的,看看以后能不能优化,现在用图片代替。 在series里面添加:

    symbol:'image://image/dot1.png', //设置标注点的图片,或者有('circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow') symbolSize:10,//标注点的大小

    <5>添加标注文本,修改样式

    在series里面添加:

    label:{ normal:{ show:true, position:[0,-20], textStyle:{ color:"#1daffa" } } }

    <6>去掉动画效果,把折线变成曲线 在option里面添加,和series同级

    animation : false,//是否启用图表初始化动画,默认开启

    在series里面添加

    smooth:true,//是否平滑曲线显示。

    2.大于7个点的实现 <1>首先实现一个简单的曲线,去掉标注

    option2={ xAxis:{ data:chartDate, show:false }, yAxis:{ boundaryGap:false, min:"dataMin", show:false }, animation : false,//是否启用图表初始化动画,默认开启 series:[ { name:"体脂", type:"line",//折线图,还有pie(饼状图), smooth:true, symbol:"none",//去掉标注 lineStyle:{//线条颜色 normal:{ color: '#1daffa', width:1 } }, itemStyle:{ normal:{ color: 'rgba(29, 175, 250, 0.3)', } }, data:weight } ] }

    <2>实现极点的标注

    在series里面添加:

    markPoint: { data: [ { type:'max', symbolSize:2, label: { normal: { position: 'top', formatter: '{c}', textStyle:{ color:"#1daffa" } } } }, { type:'min', symbolSize:2, label: { normal: { position: 'bottom', formatter: '{c}', textStyle:{ color:"#1daffa" } } } } ] },

    三.后期数据交互

    1.当数据少于7个点的时候

    var weight=[55.4,55.9,53];

    //初始化echarts实例 var chart1=$("#chart1").get(0); var myChart=echarts.init(chart1); var chartDate=[1,3,5,8,10,15,18,22,25,28,30]; var weight=[55.4,55.9,53]; //var weight=[55.4,55.9,53,56,57,58,56.7,53,55,54,53]; var dataLength=weight.length; var symbolImg='image://image/1.png'; if(dataLength <=7 ){ var dataText="["; var dataArr=new Array(); for(var i=0;i<7;i++){ var noDataText="{value:"+weight[dataLength-1]+",symbol:'emptyCircle',symbolSize:5,label:{ normal:{show:false}}},"; if(i < dataLength){ dataArr.push({"value":weight[i],"symbol":symbolImg,"symbolSize":10}); }else{ dataArr.push({"value":weight[dataLength-1],"symbol":'emptyCircle',"symbolSize":5,"label":{"normal":{"show":false}}}); } } }else{ dataArr=weight; }

    2.多余7个点

    var weight=[55.4,55.9,53,56,57,58,56.7,53,55,54,53];

    四.完整代码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" /> <!-- 引入 ECharts 文件 --> <script src="js/echarts.js"></script> <script src="js/jquery-3.0.0.min.js"></script> </head> <style type="text/css"> html,body{ margin:0; padding: 0; } .chartContainer{ width:100%; height:10rem; border:1px solid pink; box-sizing:border-box; } </style> <body> <div class="chartContainer" id="chart1"> </div> </body> <script type="text/javascript"> //初始化echarts实例 var chart1=$("#chart1").get(0); var myChart=echarts.init(chart1); var chartDate=[1,3,5,8,10,15,18,22,25,28,30]; //var weight=[55.4,55.9,53]; var weight=[55.4,55.9,53,56,57,58,56.7,53,55,54,53]; var dataLength=weight.length; var symbolImg='image://image/1.png'; if(dataLength <=7 ){ var dataText="["; var dataArr=new Array(); for(var i=0;i<7;i++){ var noDataText="{value:"+weight[dataLength-1]+",symbol:'emptyCircle',symbolSize:5,label:{ normal:{show:false}}},"; if(i < dataLength){ dataArr.push({"value":weight[i],"symbol":symbolImg,"symbolSize":10}); }else{ dataArr.push({"value":weight[dataLength-1],"symbol":'emptyCircle',"symbolSize":5,"label":{"normal":{"show":false}}}); } } }else{ dataArr=weight; } //对echarts做基础配置 option={ xAxis:{ data:chartDate, show:false }, yAxis:{ min:"dataMin",//可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。 show:false }, animation : false,//是否启用图表初始化动画,默认开启 series:[ { name:"体脂", type:"line",//折线图,还有pie(饼状图), smooth:true,//是否平滑曲线显示。 symbol:'image://image/dot1.png',//设置标注点的图片,或者有('circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow') symbolSize:10,//标注点的大小 lineStyle:{//线条颜色 normal:{ color: 'rgba(29, 175, 250, 0.3)', } }, itemStyle:{ normal:{ color: 'rgba(29, 175, 250, 0.3)', } }, label:{ normal:{ show:true, position:[0,-20], textStyle:{ color:"#1daffa" } } }, data:dataArr, } ] } option2={ xAxis:{ data:chartDate, show:false }, yAxis:{ boundaryGap:false, min:"dataMin", show:false }, animation : false,//是否启用图表初始化动画,默认开启 series:[ { name:"体脂", type:"line",//折线图,还有pie(饼状图), smooth:true, symbol:"none",//去掉标注 lineStyle:{//线条颜色 normal:{ color: '#1daffa', width:1 } }, itemStyle:{ normal:{ color: 'rgba(29, 175, 250, 0.3)', } }, markPoint: { data: [ { type:'max', symbolSize:2, label: { normal: { position: 'top', formatter: '{c}', textStyle:{ color:"#1daffa" } } } }, { type:'min', symbolSize:2, label: { normal: { position: 'bottom', formatter: '{c}', textStyle:{ color:"#1daffa" } } } } ] }, data:dataArr } ] } var dataLength=weight.length; if(dataLength <= 7){ myChart.setOption(option); }else{ myChart.setOption(option2); } </script> </html>
    转载请注明原文地址: https://ju.6miu.com/read-964477.html

    最新回复(0)