vue+Echarts 折线图markPoint凸显某条数据的实现过程

业务要求

1.	突出显示当前选择的数据
2.	背景网格化
3.	线条下方区域颜色渐变
4.	数据点均匀分布
5.	鼠标移动到数据点上时,展示数值和时间

思路

1. 首先完成样式上的同步
2. 功能的初步添加
3. 针对业务进行功能修改

实现步骤

1. 基础样式

	1.  折线图,圆滑曲线
	2.	X轴Y轴颜色改变,分割线及颜色改变
	3.	折线拐点设置为实心圆,改变大小
	4.	折线下方的阴影区域
xAxis: {
  type: 'value',
  axisLine: {		 						// x轴线的配置
    lineStyle: {
      color: ['#D1ECC3']
    }
  },
  splitLine: { 								// x轴分割线的配置
    show: true,
    lineStyle: {
      color: ['#D1ECC3']
    }
  },
  axisLabel: { 								// 刻度线标签配置
    color: "#84868E",
    fontSize : 12,
  }
},
yAxis: {									// y轴线的配置
  type: 'value',
  axisLine: {
    lineStyle: {
      color: ['#D1ECC3']
    }
  },
  splitLine: {
    show: true,
    lineStyle: {
      color: ['#D1ECC3']
    }
  },
  axisLabel: {
    color: "#84868E", 						// 刻度线标签颜色
    fontSize : 12
  }
},
series: [{ 									// 数据配置
  // 先给假数据让它显示出来。要注意这里为什么这么写,如果X轴不指定刻度,那么data中的每一个值的下标为0的值,会作为X轴的依赖
  data: [[0,150], [1,230], [2,224], [3,218], [4,135], [4,147], [5,260]],
  type: 'line'  							// 折线图
  smooth: true, 							// 圆滑曲线
  symbol: 'circle',							// 拐点图形设置为实心圆
  symbolSize: 8,							// 拐点大小
  itemStyle: {								// 单条折线的具体设置
    normal: {
      borderType: "solid",
      color: '#67C23A',
      lineStyle: {
        width: 3,							// 折线宽度
        color: '#72cf44'
      }
    }
  },
  areaStyle: { 								// 折线下方的渐变阴影区域
    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
      {
        offset: 0,
        color: '#b4f195'
      },
      {
        offset: 1,
        color: '#fff'
      }
    ])
  }
}]

此时图表的基本样子就出来了,还差一些功能,我们继续添加。

1.	 凸显某条数据
2.	 鼠标移动到某条数据显示具体信息
series: {
	......,
	markPoint: {							// 凸显最大值最小值
	    data: [
	      { type: 'max', name: 'Max' },
	      { type: 'min', name: 'Min' }
	    ]
	},
},
tooltip: {									// 提示框配置
  trigger: 'axis',							// 触发类型
  axisPointer: {							// 指示器类型
    type: 'shadow'
  }
}

此时业务需要的样式和功能我们都已添加,接下来就是完善细节了

3. 完善细节

1.	tootip提示框的具体内容
2.	高亮数据的选择
series: {
	......,
	markPoint: {							// 凸显最大值最小值
	    data: [	
	      { yAxis:'', xAxis:'', value: '' }	// 这种写法时可以凸显某些能确定在坐标轴上大概位置的数据,value为要凸显的内容
	    ]
	},
},
tooltip: {
	......
	formatter: function (params) { 				// 格式化提示内容
      var str = '';
      console.log(params)						// 打印查看一下params里面都有哪些内容
      params.forEach(item=>{					// 下面的这段字符串是为了自定义数据前面的圆点样式
        str += item.marker + item.value[3] + ":" + item.value[1] + "</br>" + '<span style=\"display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:skyblue;\"></span>' + '时间' + ":" + item.value[2]
      })
      return str
    }
}

总结

此次的功能看起来很简单,但是仍然花了我一天的时间,主要是花在查找echarts的API文档以及处理数据上面。
不得不感慨echarts真的是很牛逼,用起来很好用但是繁琐,只能是熟能生巧了。


版权声明:本文为weixin_45542021原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。