Echarts开发 自定义悬浮窗格式option.tooltip.formatter 动态数据项数据处理series JSON配合二维数组处理数据等

在Echarts开发中,为了解决数据过多导致的悬浮窗显示问题,作者采用了表格样式展示,并通过JSON处理二维数组数据。经过对官方文档的深入研究,解决了在`option.tooltip.formatter`中无法获取并操作`series`中数据的问题,实现了动态数据项的展示。最终,通过调整数据格式,成功在悬浮窗中展示了所需内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续上篇开发任务 需用到echarts图,但是由于数据项过多,遇到悬浮框显示问题被遮住 需要改为表格样式且多项数据展示

先上一天开发下来的总结:
echarts官方文档.先看文档理解 再找案例 效率更高。

一开始无法实现 自己在option外用JSON将数组装为二维数组
想需要时取出来就好了。

	var json={};
	for(var j=0;j<DEFECT_CNAME.length;j++){//把缺陷名按顺序放入JSON中  为对应DEFECT_CNAME以便循环输出
			json[DEFECT_CNAME[j]]=new Array();//放入数组
			for (var i = 0; i < 2; i++) {
				json[DEFECT_CNAME[j]][i] = new Array();
				for (var x= 0; x < PRODUCE_TIME.length; x++) {
					json[DEFECT_CNAME[j]][i][x] = 0;
				}
			}
		}	
	var j=0;
	for(var i=0;i<list.length;i++){//遍历查询结果list集
		if(list[i][mapPojo.PRODUCE_TIME.pos].substr(0,timecount)==PRODUCE_TIME[j]){//相同时间跨度的不同区域数据处理  缺陷个数和面积
			for(var X=0;X<DEFECT_CNAME.length;X++){
				if(DEFECT_CNAME[X]==list[i][mapPojo.DEFECT_CNAME.pos]){//同时间段同名数据
					count = json[DEFECT_CNAME[X]][0][j];
					count+=parseInt(list[i][mapPojo.DEFECT_COUNT.pos]);
					json[DEFECT_CNAME[X]][0][j]=count;
					
					count = json[DEFECT_CNAME[X]][1][j];
					count+=parseFloat(list[i][mapPojo.DEFECT_AREA.pos]);
					json[DEFECT_CNAME[X]][1][j]=count;
					break;
				}
			}
		}
		else{j++;}
	}

效果如下图:在这里插入图片描述
然后将其循环放入series中:

	var series=[];
	   for(var i = 0;i<DEFECT_CNAME.length;i++){
	       series.push({
	           name: DEFECT_CNAME[i],
	           type: 'line',
	           smooth: true,
	           data: json[DEFECT_CNAME[i]
	       });
	 }

结果无论怎么改series.data的格式,也确定了数据全部放入
在这里插入图片描述

但就是在option.tooltip.formatter找不到放在series中的数据而无法操作,又不能在 option = {}中用数据所在的JSON(因为不是同一方法)。

在这里插入图片描述

仔细查阅文档后才发现 官方对series.data的格式有规范的定义echarts-series-line.data
而自己之前只看例子反推来做图,效率低错误率高,算是意识到了开发阅读文档的重要性了

在充分理解了官方文档之后对数据格式进行全面修改:
二维数组全面对应官方规范:

series: [{
      data: [
          // xAxis    yAxis
          [  0,        0,    2  ], // 意思是此点位于 xAxis: '星期一', yAxis: 'a'。
          [  '星期四',  2,    1  ], // 意思是此点位于 xAxis: '星期四', yAxis: 'm'。
          [  2,       'p',   2  ], // 意思是此点位于 xAxis: '星期三', yAxis: 'p'。
          [  3,        3,    5  ]
      ]
  }]

修改后的代码如下:

var json={};
  for(var j=0;j<DEFECT_CNAME.length;j++){//把缺陷名按顺序放入JSON中  为对应DEFECT_CNAME以便循环输出
  	json[DEFECT_CNAME[j]]=new Array();//放入数组
  	for (var i = 0; i < PRODUCE_TIME.length; i++) {
  		json[DEFECT_CNAME[j]][i] = new Array();
  		for (var x= 0; x < 3; x++) {
  			if(x==0){
  				json[DEFECT_CNAME[j]][i][x] = PRODUCE_TIME[i];
  			}else{
  				json[DEFECT_CNAME[j]][i][x] = 0;
  			}
  		}
  	}
  }	
  console.time('time'); 
  var j=0;
  for(var i=0;i<list.length;i++){//遍历查询结果list集
  	if(list[i][mapPojo.PRODUCE_TIME.pos].substr(0,timecount)==PRODUCE_TIME[j]){//相同时间跨度的不同区域数据处理  缺陷个数和面积
  		for(var X=0;X<DEFECT_CNAME.length;X++){
  			if(DEFECT_CNAME[X]==list[i][mapPojo.DEFECT_CNAME.pos]){//同时间段同名数据
  				count = json[DEFECT_CNAME[X]][j][1];
  				count+=parseInt(list[i][mapPojo.DEFECT_COUNT.pos]);
  				json[DEFECT_CNAME[X]][j][1]=count;
  				
  				count = json[DEFECT_CNAME[X]][j][2];
  				count+=parseFloat(list[i][mapPojo.DEFECT_AREA.pos]);
  				json[DEFECT_CNAME[X]][j][2]=count;
  				break;
  			}
  		}
  	}
  	else{j++;}
  }
  console.timeEnd('time'); 	
  
  var series=[];
     for(var i = 0;i<DEFECT_CNAME.length;i++){
         series.push({
             name: DEFECT_CNAME[i],
             type: 'line',
             smooth: true,
             data: json[DEFECT_CNAME[i]]
         });
   }

option中的测试代码:

 option = {
		    tooltip : {
		        trigger: 'axis',
		        formatter(params){
		            for(x in params){
		        	}
		        }
		    }
		  }

浏览器测试结果如图:
在这里插入图
片描述
成功可以在option.tooltip.formatte中操作!
再编写以下代码对数据进行排版:

tooltip : {
		        trigger: 'axis',
		        axisPointer: {
		            type: 'cross',
		            label: {
		                backgroundColor: '#6a7985'
		            }
		        },
		        formatter: function (params, ticket, callback) {
		        	var showHtm="";
		            for(x in params){
		            	showHtm+=params[x].seriesName +"缺陷个数:"+params[x].data[1]+"缺陷面积:"+params[x].data[2]+'<br>';
		            }
		            return showHtm;
		        }
		    },

执行效果如图所示:在这里插入图片描述
困扰了三个小时的问题终于解决 不开心是假的哈哈哈
做开发最开心的时候就是需求解决的时候了吧
开心!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跳动的世界线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值