echarts折线图实线与虚线拼接及提示框浮层内容格式的设置

echarts折线图实线与虚线拼接及提示框浮层内容格式的设置

  • 想要实现实线与虚线的结合,后端返回的数据是动态的,根据状态的不同展示实线与虚线。
  • 例子1: 数据是固定的
  series: [
       {
           name:'在线数',
           type:'line',        
           data:[120, 132, 191, "-", "-", "-", "-"]
       },
       {
           name:'在线数',
           type:'line',     
           smooth:false,   //关键点,为true是不支持虚线,实线就用true
           itemStyle:{
               normal:{
                   lineStyle:{
                       width:2,
                       type:'dotted'  //'dotted'虚线 'solid'实线
                   }
               }
           }, 
           
           data:["-", "-", 191, 234, 190, "-", "-"]
       },
       {
           name:'在线数',
           type:'line',
           data:["-", "-", "-", "-", 190, 330, "-"]
       },
       {
           name:'在线数',
           type:'line',
           smooth:false,   //关键点,为true是不支持虚线,实线就用true
           itemStyle:{
               normal:{
                   lineStyle:{
                       width:2,
                       type:'dotted'  //'dotted'虚线 'solid'实线
                   }
               }
           }, 
           
           data:["-", "-", "-", "-", "-", 330, 410]
       },         
 
   ]

例子2: 数据是后端返回的,需要整理数据

        series: [
          {
            name: '气流量',
            type: 'line',
            itemStyle:{
               normal:{
                   lineStyle:{
                       width:2,
                       type:'solid',  //'dotted'虚线 'solid'实线
                       color:'rgb(67, 162, 228)' 
                   },
                   color:'rgb(67, 162, 228)',
               }
           }, 
            data: []
          },
          {
           name:'气流量',
           type:'line',     
           smooth:false,   //关键点,为true是不支持虚线,实线就用true
           itemStyle:{
               normal:{
                   lineStyle:{
                       width:2,
                       type:'dotted',  //'dotted'虚线 'solid'实线
                       color:'rgb(67, 162, 228)' 
                   },
                   color:'rgb(67, 162, 228)', 
               }
           },  
            data: []
          },
        ]
      this.momentChar.setOption({
        xAxis: { data: xAxis_arr },
        series: [
            { data: newArr1},  // 实线的数据整理
            { smooth:false,   //关键点,为true是不支持虚线,实线就用true
              itemStyle:{
                normal:{
                    lineStyle:{
                        width:2,
                        type:'dotted'  //'dotted'虚线 'solid'实线
                    }
                }
              }, 
              data: newArr2  //虚线的数据整理
            },      
          ]
      })

例如后端返回的数据是这样的:

 res = [
        {
          num: 40,
          state: 0,
          date: 1
        },
        {
          num: 60,
          state: 0,
          date: 2
        },
        {
          num: 50,
          state: 0,
          date: 3
        },
        {
          num: 20,
          state: 0,
          date: 4
        },
        {
          num: 40,
          state: 1,
          date: 5
        },
        {
          num: 60,
          state: 2,
          date: 6
        },
       ]
       然后整理数据根据状态不同分成两个数组:
series_arr1: [40, 60, 50, 20, "-", "-", "-", "-", 20.6, "-", "-", "-", "-", 20.6, "-", "-", "-", 20.6, "-", "-", 0, 0, 90, 0]
series_arr2: ["-", "-", "-", "-", 40, 60, 50, 50.3, "-", 40.7, 110, 90, 50.3, "-", 40.7, 0, 90, "-", 40.7, 110, "-", "-", "-", "-"]       

用上面的数据画出来的折线图是断断续续的,原因: --与–中间最少得有两个数据 一个数据的话就变成一个点了 这个点与前面的点和后面的点以什么形式相连就会模糊 ,所以连不上。
在这里插入图片描述
解决方法: 需要再重新整理数据:循环(series_arr1)这个数组,找到里面的item是否是“-”的那项,再判断它的后一项是不是“-”,如果不是说明是最后一项,将这一项的值“-”替换成这个数组(series_arr1)对应的那一项的值,直接上代码吧。

      console.log(series_arr1)
      console.log(series_arr2)
      let newArr1 = JSON.parse(JSON.stringify(series_arr1))
      let newArr2 = JSON.parse(JSON.stringify(series_arr2))
      series_arr1.map((item,index) =>{
        if(item !== "-"){
        if(series_arr1[index+1] === "-"){
           newArr2[index] = item;
        }
        }
        });
        series_arr2.map((item,index) =>{
        if(item !== "-"){
        if(series_arr2[index+1] === "-"){
           newArr1[index] = item;
        }
        }
        });
        console.log(newArr1)
        console.log(newArr2)

        newArr1: [40, 60, 50, 20, "-", "-", "-", 50.3, 20.6, "-", "-", "-", 50.3, 20.6, "-", "-", 90, 20.6, "-", 110, 0, 0, 90, 0]
        newArr2: ["-", "-", "-", 20, 40, 60, 50, 50.3, 20.6, 40.7, 110, 90, 50.3, 20.6, 40.7, 0, 90, 20.6, 40.7, 110, "-", "-", "-", "-"]

在这里插入图片描述

补充: 提示框浮层内容格式的设置,开始时的虚线部分的提示框是没有值显示的,只有实线才有值,

        tooltip: {
          trigger: 'axis',
          formatter: function(params) {
            console.log(params)  //这里是两个数组,
            if(params[0].data!='-') {
               var val = params[0]
            }else {
              var val = params[1]
            }
            if (val.data !== null) {
              return (
                  val.name +
                  '用气量 : ' +
                  toFix(val.data, 2) +
                  'm³/h'
                )
        }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值