如图所示:
解决方案1:xAxis.axisLabel属性
axisLabel的类型为object,主要作用是设置坐标轴的刻度标签。 (其实yAxis也有这个属性)
axisLabel: { interval:0, rotate:40 }
解释一下
间隔
坐标轴刻度标签的显示间隔(类别轴有效)。 默认情况下,标签会以不重叠标签的形式显示(即默认会显示部分文字不完整)
可以设置为 0 以强制显示所有标签。 如果设置为1,则表示每隔一个标签显示一个标签。 如果是3,表示每3个标签显示一个标签。 这样
旋转
标签倾斜的角度,当类别轴的类别标签未完全显示时echarts x轴标签倾斜,可以旋转以避免标签重叠(官方是这么说的)。 旋转角度-90度到90度
问题又来了。 如果该名称的x轴上的文字太长,则会被遮挡,或者无法完全显示。 这时候就可以利用grid属性来解决
grid: { left: '10%', bottom:'35%' },
如图所示:
方案二:调用formatter垂直显示文本
通常很多人都习惯方法1,该方法并不完美,在一定程度上还是解决了一些问题。文本不是特别大的时候还是可以的,我觉得不如第一种方法
格式化程序在axisLabel中使用来反弹。 格式化程序有两个参数。 格式化程序的使用方式是:function(value,index){},value是类别(测试诊所A,人民诊所),index是类别索引。
axisLabel: { interval: 0, formatter:function(value) { return value.split("").join("n"); } }
如图所示:
竖排文本的格式化程序有点太简单了,所以让我们用两个单词和 n 来换行。 格式化程序如下:
axisLabel: { interval: 0, formatter:function(value) { debugger var ret = "";//拼接加n返回的类目项 var maxLength = 2;//每项显示文字个数 var valLength = value.length;//X轴类目项的文字个数 var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数 if (rowN > 1)//如果类目项的文字大于3, { for (var i = 0; i < rowN; i++) { var temp = "";//每次截取的字符串 var start = i * maxLength;//开始截取的位置 var end = start + maxLength;//结束截取的位置 //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧 temp = value.substring(start, end) + "n"; ret += temp; //凭借最终的字符串 } return ret; } else { return value; } } }
疗效如图
解决方案3:X轴类别项用换行符分隔(使用格式化程序中的index参数)
两者中的第二种方法都是使用格式化程序中的value参数来实现文本拼接n换行,并且不使用index参数。 现在我们使用这两个参数来实现每隔一个类别项换行。
疗效如图:
代码比较简单:
axisLabel: { interval: 0, formatter:function(value,index) { debugger if (index % 2 != 0) { return 'nn' + value; } else { return value; } } }
这些是我推荐的。 以上方法基本可以解决问题,但都不是完美的。
你可能会遇到一个常见的情况
恐怕你也会遇到这样的问题。 由于这个数据几乎都是动态的,所以当类别很少的时候就可以显示xAxis类别轴上的类别数量,所以不需要这样的倾斜。 那又怎样呢? 这确实有点尴尬,虽然看起来没有解决办法,但确实很尴尬,如果你能告诉我echarts x轴标签倾斜,谢谢!