echarts折线图多条折线x轴不同,以及vue中引用

news/2024/7/10 2:52:03 标签: vue, echarts

需求:echarts绘制多条折线,x轴间隔不同。

效果图:


   数据格式

分析:因为每条线的x轴不同,所以普通的渲染方式无法实现。解决办法是series的数据格式 -- [ [x,y],[x,y] ].

核心代码:

1)小技巧--js时间格式化封装    如果没有引es6,可以直接做封装 function(time){}

//时间格式化
export const dateconvert = (time) => {
  time=new Date(time)
  var datetimeFormat = "yyyy-MM-dd hh:mm:ss";
    var o = {
      "M+": time.getMonth() + 1, //月份 
      "d+": time.getDate(), //日 
      "h+": time.getHours(), //小时 
      "m+": time.getMinutes(), //分 
      "s+": time.getSeconds(), //秒 
      "q+": Math.floor((time.getMonth() + 3) / 3), //季度 
      "S": time.getMilliseconds() //毫秒 
  };
  if (/(y+)/.test(datetimeFormat)) {
    datetimeFormat = datetimeFormat.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length));
  }
  for (var k in o)
      if (new RegExp("(" + k + ")").test(datetimeFormat)) 
      datetimeFormat = datetimeFormat.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return datetimeFormat;
}
//dateconvert('2018-05-19T01:00:00Z')   --调用
2) option样式设置  --根据需求自己定义样式
 option:{
                tooltip: {              --鼠标滑过提示框样式
                    trigger: 'item',
                    padding: 10,
                    backgroundColor: 'rgba(9, 131, 195, 0.53)',
                    formatter:function(a){
                       return a.data[0]+'</br>'+a.seriesName+'--'+a.data[1]+'分'
                    },
                },
            legend:{               --图例样式
                orient: 'vertical',
                y: 'top',
                top:'5%',  
                left: 'right',   
                textStyle: {
                    color: '#fff'          // 图例文字颜色
                }
            },
            grid: {                   --折线位置
                top:'8%',
                right: '10%',
            },
            xAxis: {                  --x轴样式
                type: 'time',
                name: '时间',
                nameTextStyle: {fontSize: 15, color: '#fff'},
                // boundaryGap: false,
                boundaryGap: [0, 100],
                axisLine: {
                lineStyle: {
                    color: "#7bdeff",
                }
                },
                axisTick: {
                show: true
                },
                splitLine: {
                    show: true, 
                    //  改变轴线颜色
                    lineStyle: {         
                        color: '#1f516d'
                    }                            
                },
            },
            yAxis: {                         --y轴样式
                type:"value",
                name: "得分",
                nameTextStyle: {fontSize: 15, color: '#fff'},
                axisLabel: {
                show: true
                },
                axisLine: {
                lineStyle: {
                    color: "#7bdeff",
                }
                },
                axisTick: {
                show: true
                },
                splitLine: {
                lineStyle: {
                    color: "#1f516d",
                }
                },
            },
   
            calculable: true,
            color:["red","#34affd",'#ff5555','#ffde00','#5af4ce','#d050ff','#CD5C5C','#4DCD53','#F1AB27','#B96CD3'],  --折线颜色
            series:[
               
            ],
            animation: false   
            }

3)封装图表

    drawLine(){
        // 基于准备好的dom,初始化echarts实例
        let myChart = echarts.init(document.getElementById('lineChart'))
        // 绘制图表
        myChart.setOption(this.option)
     }

4)数据处理 

思路: 定义数组最开始[比赛开始时间,0],数组末尾[比赛结束时间,最后的得分],数组中间数据 [得分时间,得分]

         数据格式[ [X,Y],[X,Y]]

        数据处理成这样就能正常展示

         

下面的操作是处理数据为上面图片的格式,可以根据自己的情况处理

 trend(getCookie('user_id')).then(res=>{
     if(res.data.status_code==0){
            console.log(res)
            this.lineSeries=[]
            let datas=res.data.data
            for ( var i = 0; i < datas.length; i++) {  
            
            var  data = [];
            var  temp=null
            var  dateTime = dateconvert('2018-05-19T01:00:00Z');
            var score = 0;
                data.push([dateTime, 0]);
                for (var j = 0; j < datas[i].score.length; j++) {
                    dateTime = dateconvert(datas[i].score[j].time);
                    score=datas[i].score[j].score
                    // for (var k = 0; k <= i; k++) {
                    //     score = datas[i].data[k].score + score;
                    // }
                    data.push([dateTime, score]);
                }
                if (this.currentTime > dateconvert('2018-05-20T01:00:00Z')) {
                    dateTime = dateconvert('2018-05-20T01:00:00Z');
                } else {
                    dateTime = this.currentTime;
                }
                data.push([dateTime, data[data.length - 1][1]]);
                temp = {
                    name: datas[i].group,
                    type: "line",
                    data: data
                };

                this.option.series.push(temp)
            
                
            }
        
        this.drawLine();
     }else{
            this.$message({
                message: res.data.msg,
                type: 'warning',
                duration:1500,
                center:true,
                customClass:'messageModal'
            });
     }
     
   
 })



http://www.niftyadmin.cn/n/1202940.html

相关文章

【node学习】koa2实现简单的表单提交 入门前端+后台完整代码

开始一个小系列的博客&#xff0c;记录自己的学习过程。koa2实现简单的登录页面的表单提交。入门级别&#xff0c;没有数据库操作&#xff0c;开始接触koa2小接口的编写。 推荐一个不错的koa2的基础教程&#xff1a;https://blog.csdn.net/lszy16/article/list/2 前端请求到数…

redsi一主两从三哨兵

1.前提准备 防火墙,selinux,主机名解析&#xff0c;所有主机安装gcc [rootlocalhost ~]# vim /etc/hosts 192.168.122.135 redis_master 192.168.122.136 redis_slave01 192.168.122.137 redis_slave02 192.168.122.138 sentinel01 192.168.122.139 sentinel02 192.168.12…

layui表格隐藏列的简单实现方法

需求&#xff1a;渲染表格的时候&#xff0c;比如id在内的一些列是不需要展示给用户看的&#xff0c;但是在操作表格的时候还需要用得到&#xff0c;这就需要隐藏列 的功能 实现效果&#xff1a;页面上不显示&#xff0c;但是能获取到id的值。 实现方法&#xff1a; table.ren…

春晚红包:挺住的百度和崩坏的应用商店

2019年2月5日&#xff0c;当中央电视台春节联欢晚会落下帷幕的时候&#xff0c;笔者的朋友圈出现了这样一条消息&#xff1a;“顺利抗住宇宙第一大IP&#xff0c;全程无宕机&#xff01;” 挺住的百度 相信很多人都猜到了上面这条朋友圈是出自百度同学之手。这个事情要从2019年…

layui服务器端分页实例

layui的分页功能是很不错的&#xff0c;方便快捷。jquery普通页面开发可以考虑。下面以表格为例&#xff0c;举例layui分页功能。其他&#xff08;利于list等&#xff09;同理。首先将layui.css、layui.all.js引入在页面中。 官网&#xff08;下载地址&#xff09;&#xff1a…

牛客寒假6-A.出题

链接&#xff1a;https://ac.nowcoder.com/acm/contest/332/A 题意&#xff1a; 小B准备出模拟赛。 她把题目按难度分为四等&#xff0c;分值分别为6,7,8,9。 已知小B共出了m道题&#xff0c;共n分。 求小B最少出了多少道6分题。 思路&#xff1a; n无解的条件&#xff1a;n &…

【echarts应用】---pie饼图篇

目的&#xff1a;对echart 图表进行封装调用--饼图篇。下面是基础的样式&#xff0c;可以改成自己需要的样式。&#xff08;找个地方保存&#xff0c;以后用到的时候方便复制粘贴&#xff0c;哈哈&#xff09; 1.页面中引入echarts、jquery文件 <script src"./js/jque…

【echats应用】---gauge仪表盘篇

目的&#xff1a;对echarts图表进行封装调用--仪表盘篇。 基础的仪表盘有两种方式都可以实现&#xff0c;一是echarts图表&#xff0c;一是css3的方式也可以实现。主要讲解echarts的方式 法一&#xff1a;echarts方法 普通样式 …