echarts 标签文字过多导致显示不全解决方案

echarts x轴标签文字过多导致显示不全

标签显示不全

解决办法1:xAxis.axisLabel 属性

axisLabel的类型是object ,主要作用是:坐标轴刻度标签的相关设置。(当然yAxis也是一样有这个属性的)

axisLabel: {     
  interval:0,    
  rotate:40  
}  

显示不全并将文字倾斜。如图:

倾斜设置

稍微解释一下interval:
坐标轴刻度标签的显示间隔(在类目轴中有效哦),默认会采用标签不重叠的方式显示标签(也就是默认会将部分文字显示不全)
可以设置为0强制显示所有标签,如果设置为1,表示隔一个标签显示一个标签,如果为3,表示隔3个标签显示一个标签,以此类推

rotate:标签倾斜的角度,在类目轴的类目标签显示不全时可以通过旋转防止标签重叠(官方这样说的)旋转的角度是-90到90度
问题又来了,这个名称x轴的文字如果太长会受到遮挡,还是显示不全,这个时候可以用grid属性解决

grid: {    left: '10%',    bottom:'35%'  },

如图:

image.png

解决办法2:调用formatter文字垂直显示

一般很多人都习惯办法1的方式虽然不是很完美,但是在一定程度上还是解决了一些问题。在文字不是非常多的情况下还是可以的,感觉还没第一种方法好

axisLabel中使用formatter回调,formatter有两个参数,使用方法是这样的formatter:function(value,index){} ,value是类目(测试医院A,人民医院),index 是类目索引。

axisLabel: {    interval: 0,    formatter:function(value){      return value.split("").join("\n");    }  }  
垂直显示

文字竖直这个formatter实在有点太简单化了,所以我们来做一个两个字的加\n的换行。formatter如下:

axisLabel: {
        fontSize: 8,
        interval: 0,
        formatter: function(params) {
            var newParamsName = []; // 最终拼接成的字符串    
            var paramsNameNumber = params.length; // 实际标签的个数    
            var provideNumber = 2; // 每行能显示的字的个数    
            var rowNumber = Math.ceil(paramsNameNumber / provideNumber); // 换行的话,需要显示几行,向上取整    
            /**      * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签      */
            // 条件等同于rowNumber>1    
            if(paramsNameNumber > provideNumber) {
                /** 循环每一行,p表示行 */
                for(var p = 0; p < rowNumber; p++) {
                    var tempStr = ""; // 表示每一次截取的字符串        
                    var start = p * provideNumber; // 开始截取的位置        
                    var end = start + provideNumber; // 结束截取的位置       
                    // 此处特殊处理最后一行的索引值       
                    if(p == rowNumber - 1) {
                        tempStr = params.substring(start, paramsNameNumber); // 最后一次不换行        
                    } else {
                        tempStr = params.substring(start, end);  // 每一次拼接字符串并换行       
                    }
                    newParamsName.push(`{p|${tempStr}}`); // 最终拼成的字符串      
                }
            } else {
                newParamsName.push(params); // 将旧标签的值赋给新标签    
            }
            return newParamsName.join("\n"); //将最终的字符串返回 
        },
        rich:{
            p:{
                align:'right'
            }
        }
    },

效果如图


每行两个字

解决办法3:X轴类目项隔一个换行(使用formatter中index参数)

都是上面的第二种方法是利用formatter中的value参数实现了文字拼接\n换行的,但是index参数并没有使用,现在我们就一起来使用这两个参数实现隔一个类目项换行。

效果如图:

错行显示

代码比较简单:

axisLabel: {
    interval: 0, formatter: function (value, index) {
        if (index % 2 != 0) {
            return '\n\n' + value;
        } else {
            return value;
        }
    }
} 
``

以上几种方法基本上能解决问题,可能会有比这更好的办法。

你可能感兴趣的:(echarts 标签文字过多导致显示不全解决方案)