最近项目的一个功能是绘制雷达图。鼠标滑过雷达图拐点显示该维度的相关数据,需要显示雷达图的刻度。但是我发现一个简单的雷达图好像不能显示一维数据。我总结了自己在绘制雷达图时遇到的三个难点:(1)如何显示刻度。(2)如何判断滑动点是拐点。(3)如何找出拐点对应的维度数据。问题解决总结如下:问题(一):echarts版本从4.x开始不再提供雷达图的scale标签属性,但是3.x版本有scale的配置属性,radar.axisLabel.所以如果要显示雷达图的比例尺,可以将echarts的版本改回3.x版本。但是对于我的项目来说,这种方法是不可行的,因为我的项目中很多图表都是基于4.x版本绘制的。如果我改回3.x版本,要改的东西太多了。一击移动你的整个身体。所以我得想别的办法了。我考虑用极坐标作为雷达图的底图,用极坐标的比例尺作为雷达图的比例尺。关键步骤如下:1、我的雷达图显示数值范围是1~10,显示的刻度间隔是2。所以我用极坐标的径向轴radiusAxis来显示刻度,刻度间隔是22.另外,需要将雷达图的radius设置radar.radius和极坐标的radius设置polar.radius设置成相同的,使它们有相同的缩放比例。3、极坐标径向轴的分度数radiusAxis.splitNumber和雷达图指示轴的radar.splitNumber必须相同。4、极坐标的中心点polar.center和雷达图的中心点radar.center也必须相同。vardimensionData=[{name:“Override”,max:10},{name:“Interference”,max:10},{name:“Sensing”,max:10},{name:“Fault”,max:10},{name:"容量",max:10}];data=[7.9,3,3,5.11,4.4];varradius='60%';varradarOption={radar:{center:['50%','50%'],startAngle:90,indicator:dimensionData,splitNumber:5,radius:radius,shape:'circle',name:{show:true,textStyle:{颜色:'#ffffff',fontSize:12}},splitArea:{areaStyle:{颜色:['rgba(0,21,102,0.4)'],},},splitLine:{show:true,lineStyle:{颜色:['rgba(238,238,238,0.2)']}},axisLine:{lineStyle:{color:['rgba(238,238,238,0.2)']}}},//极坐标系polar:{radius:radius,},angleAxis:{axisLine:{lineStyle:{color:'rgba(238,238,238,0.2)'}},},radiusAxis:{//使用这个注释掉的用法可以动态控制刻度数,但有时刻度标签显示不全的现象//type:'value',//min:0,//max:10,//interval:2type:'category',axisLabel:{show:true,interval:0,fontSize:9,color:"rgba(255,255,255,0.5)",},axisTick:{show:true,inside:true,},axisLine:{show:true,lineStyle:{color:'rgba(238,238,238,0.2)'}},splitLine:{show:false,lineStyle:{color:'rgba(238,238,238,0.2)'}},data:["2","4","6","8","10"]},tooltip:{显示:false,trigger:'item'},系列:[{type:'radar',radarIndex:0,data:[{value:data}],symbol:'circle',symbolSize:6,itemStyle:{normal:{color:'rgba(255,255,255,1)',borderColor:'rgba(255,179,0,1)',borderWidth:1,}},areaStyle:{normal:{color:'rgba(255,179,0,0.8)',}},lineStyle:{width:2,color:'rgba(255,179,0,1)'}}]}问题(2):点击雷达图拐点显示相关数据。我最初的想法是使用tooltip来实现,但是发现tooltip无法实现。原因有二:一是tooltip的触发条件只能是trigger:'item',不能用trigger:'axis'。二是设置trigger:'item',当鼠标滑过雷达图任意区域时,tooltip会显示所有维度的数据。滑过拐点的时候没有办法显示数据或者只显示这个维度的数据。于是考虑使用echartsAPI提供的鼠标事件来实现效果。我使用mouseover事件和mouseout事件。我想通过事件传递的参数来判断鼠标是否越过一个拐点。我首先查看了echarts官方文档中提供的参数,并没有明显的参数可以让我判断鼠标是否在一个拐点上。但是我的组长坚信,当鼠标滑过不同的地方时,传递的参数一定有地方不一样。于是在坚持不懈、仔细查看事件参数后,终于找到了。参数params.event.target.__dimIdx,当滑过拐点时,显示拐点的维度下标,滑过其他区域时显示undefined。因此,这个参数可以用来判断鼠标是否在一个拐点上。this.radarChart.on("mouseover",function(params){varisSelectedDot=params.event.target.__dimIdx;if(isSelectedDot==undefined)return;//做鼠标在拐点上的操作});问题(3):找到拐点,如何找出拐点对应的维度数据?在echarts4.x中,事件获取的数据是所有维度的数据,不是单个维度的数据,如下图:但是此时,我已经获取到了拐点的维度下标,所以根据下标,可以得到该维度的数据。
