highchart多曲线tooltip补齐点

问题描述

用highchart画多条曲线时,tooltip设置为shared:true后,移动鼠标会显示相同x下的多个y,但要求y不能缺否则就会丢点。

运行效果

 

解决方法

当然可以通过后台将数据填充上,但最轻量级的解决方法是在formatter当遇到某y丢点时,自动取临近的前一个值显示。代码中还涉及到了浮点数小数位处理方法fixnumber。

tooltip: {
	shared: true,
	crosshairs: true,			
	formatter: function() {	
		var thisx = this.x, xtooltip;	
		var fixnumber = function(v){
			var fixedlen = 0;
			if(Math.abs(v) < 1000 &&  v !==0) 
				fixedlen = 3-Math.log(Math.abs(v))/Math.LN10;
			return v.toFixed(fixedlen);
		}
		if(typeof(thisx) === 'number'){
			xtooltip = fixnumber(thisx) + ':' ; 
		}
		else{
			xtooltip = Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', thisx)+ ': ';
		}
		var result = '<b>'+ xtooltip +'</b><br/>';
		var allseries = [], i=0, n=0;
		if(this.points && this.points.length > 0){
			allseries = this.points[0].series.chart.series;
			n = allseries.length;
		}
		var getpointtooltip = function(point, series, result){
			var seriename = '<b style="color:' + series.color + '">'+ series.name +':</b>';
			var percent = '<br/>';//饼图或叠加柱状图的比例
			if(point.percentage){
				percent = ' 占比: '+point.percentage.toFixed(2)+'%<br/>';
			}
			if(!point.z){
				result += seriename + fixnumber(point.y) + percent;
			}
			else{
				result += seriename + x + fixnumber(point.y) + ', ' + fixnumber(point.z) + percent;	
			}
			return result;
		}
		var hasdataseries = {};
		Ext.Array.each(this.points,function(point){
			hasdataseries[point.series.name]=point;
		})
		Ext.Array.each(allseries, function(series_i){
			if(!hasdataseries[series_i.name]){
				var nearest = undefined;
				Ext.Array.each(series_i.data, function(point_i){
					if(point_i.x < thisx){
						nearest = point_i;
					}else{
						return false;
					}
				})
				if(nearest){
					result = getpointtooltip(nearest, series_i, result);
				}
			}else{
				result = getpointtooltip(hasdataseries[series_i.name], series_i, result);
			}
		})
		return result;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值