echarts Y轴展示时间片段,series data数据 也是时间片段,鼠标放上去 提示框显示对应的时间片段

功能要求

        1、折线图,展示每天对应的一个时间片段

        2、echarts Y轴展示时间片段,如:['00:00','03:00','05:15']

        3、X轴展示日期,如:['xx年xx月xx日']

后端返回的数据结构,如

[
	{
		xAdate:"2024-06-15",
		data:"16:00",
        adata:"",
	},
	{
		xAdate:"2024-06-16",
		data:"05:00",
        adata:"",
	},
	{
		xAdate:"2024-06-17",
		data:"12:00",
        adata:"",
	},
]

效果图

代码构思

  •  通过后端返回的数据,无法实现该功能
  •  通过后端返回的时间片段,来做Y轴的展示,组合成一个新数组,同时要考虑数据的“去重”和“排序”
  •  要记录下来,后端的返回的时间片段,对应的Y轴新组合数组的索引,记录在对应天数中,通过循序索引拿出来,来做 series data 数据
  • echarts tooptip 鼠标展示,需要做特殊处理,通过 formatter 自定义 结构数据,通过返回的索引,查找Y轴对应的时间片段,展示出来
注意事项 -- Y轴时间片段后端返回的是否[‘00:00’]

        没有的时候 索引要+1

Y轴如何展示时间片段

    1、第一种通过 type类型设置time 来展示

       2、 第二种通过 formatter 方法来展示

      

       3、注意事项

        Y轴要设置为整数 "minInterval:1"

         

     数据处理 ---- (重点)

// 将时间字符串转换为分钟数进行比较
converData(timeStr) {
    const parts = timeStr.split(':').map(Number);
    return parts[0] * 60 + parts[1];
}
 
// 对时间数组去重并排序
sortTime(times) {
    const uniqueTimes = [...new Set(times)]; // 去重
    uniqueTimes.sort((a, b) => converData(a) - converData(b)); // 排序
    return uniqueTimes;
}

  数据处理和赋值代码

            let timeArr =[];
			let xAxi =[];
			let dataSer = [];  // 后端数据赋值
			let seri =[];
			let xAxSeri =[];// series -- 数据渲染
			dataSeri = '后端数据'
			dataSeri.forEach((item)=>
				timeArr.push(item.xxx); // 时间片段
				xAxi.push(item.xxx);// 日期
			});
			seri = this.sortTime(timeArr);
			if(seri.includes("00:00")){
				for(let i=0;i< seri.length; i++){
					for(let j=0;j< dataseri.length; j++){
						// xxx  -- 时间片段
						if(dataseri[j].xxx == seri[i]){
							// a 后端定义好一个属性存放索引
							dataSeri[j].a = i+1;
						}
					}
				}
			}else {
				for(let i=0;i< seri.length; i++){
					for(let j=0;j< dataseri.length; j++){
						// xxx  -- 时间片段
						if(dataseri[j].xxx == seri[i]){
							// a 后端定义好一个属性存放索引
							dataSeri[j].a = i+1;
						}
					}
				}
			}
			dataseri.forEach((item) =>{
				xAxSeri.push(item.a);});
			});
			this.$nextTick(()=>{
				this.yAxData= seri.includes("00:00")? seri:["00:00",...seri];
				this.xAxData = xAxi;
				this.seriesData= xAxSeri;
				this.init();
			});

echarts 整体代码

          注意 getYaxis 方法

            let option = {
				tooltip:{
					trigger:"axis"
					backgroundcolor:"rgba(0,22,46,.8)",,//设置背景颜色
					textstyle:{
						color:"#9ba6b4",
						fontsize: 14,
					},
					formatter:(item)=> {
						return `<span>日期:</span><span style='color:#e9f3ff'>${item[0].name}</span><br/>
						<span>发生时间</span><span style='color:#e9f3ff'>${this.yAxData[item[0].value]}</span>
						`
					},
				},
				grid:{
					top:"20%",
					left:"5%",
					right:"8%",
					bottom:"6%",
					containLabel: true,
				},
				XAxis:[
					{
						type:"category",
						boundaryGap: false,
						axisLine:{
							show: true,
							linestyle:{
								color:"#26367A",
								},
							},
						splitArea:{
							show: false,
						},
						axisLabel:{
							textstyle:{
								color:"#fff",
								fontsize: 14,
							},
						},
						axisTick:{
							show: false,
						},
						splitLine:{
							show: false,
						},
						data: this.xAxData,
					},
				],
				yAxis:[
					{
						name:"时段",
						nameTextstyle: {
							color:"#fff",
							},
						type:"value',
						axisLine:{
							show: false,
							},
						axisLabel:{
							textstyle:{
								color:"#fff",
								fontsize:"14",
								},
							formatter:function(value,index){
								return this .getYaxis(value,index)
								},
							},
						minInterval:1,
						splitLine:{
							show: true,
							linestyle:{
								type: "dashed",
								color:"#6fc2f1",
							},
						},
					}
				],
				series :[
					{
						type: "line",
						data: this.seriesData,
						symbolsize:10,
						symbol:"circle",
						smooth: true,
						showSymbol: false,
						linestyle:{
							width: 2,
							color:"#O0ffOc",
						},
						itemstyle:{
							normal:{
								color:"#00ff0c”,
							linestyle:{
								color:"#00ff0c”,// 线的颜色
								},
							},
						},
					}
					
				],
			}
			getYaxis(value,index){
				const arr = this.yAxData
				if(index< arr.length){
					return arr[index]
				}
			}

      

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来给你演示一下如何用Echarts绘制这样一个热力图,代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts热力图示例</title> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> </head> <body> <div id="chart" style="width:600px;height:300px;"></div> <script type="text/javascript"> var myChart = echarts.init(document.getElementById('chart')); var data = [[0,0,10],[1,0,20],[2,0,30],[3,0,40],[4,0,50],[5,0,60],[6,0,70],[7,0,80], [0,1,90],[1,1,80],[2,1,70],[3,1,60],[4,1,50],[5,1,40],[6,1,30],[7,1,20], [0,2,50],[1,2,60],[2,2,70],[3,2,80],[4,2,90],[5,2,80],[6,2,70],[7,2,60]]; var option = { tooltip: { formatter: function (params) { return '数据值: ' + params.value[2]; } }, xAxis: { show: false }, yAxis: { show: false }, series: [{ type: 'heatmap', data: data, label: { show: true }, itemStyle: { emphasis: { shadowBlur: 10, shadowColor: 'rgba(0, 0, 0, 0.5)' } }, progressive: 1000, animation: false }] }; myChart.setOption(option); </script> </body> </html> ``` 这里我们使用了Echarts的`heatmap`类型来绘制热力图,数据存储在`data`数组中,其中每个元素表示一条数据,由三个值构成,分别是横坐标、纵坐标和数据值。 为了让x轴和y轴显示,我们将它们的`show`属性设置为`false`。 为了让鼠标移入时弹出提示框,我们设置了tooltip的formatter函数。 为了让热力图分成3排,8列显示并且显示的每列每排有空隙隔开,我们需要在数据上做一些调整。 最后,我们需要注意一下样式设置,让热力图看起来更美观一些。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值