最近一直在使用echarts开发一些可视化的页面,昨天遇到了一些由于可展示区域过小,导致指示线的文字会重叠的问题。进行记录。
修改前问题:
修改方法:
- 将
series
下的avoidLabelOverlap
修改为true(是否启用防止标签重叠策略) - 设置最小扇区角度,
minAngle
(最小的扇区角度(0 ~ 360) - 调整指示线文字的显示大小
series: [
{
name: '省份',
type: 'pie',
radius: ['40%', '60%'], // 半径
center: ['40%', '54%'], // 位置
minAngle: 5,
avoidLabelOverlap: true,
label: {
normal: {
formatter: '{d}%',
textStyle: {
fontWeight: 'normal',
fontSize: 12
}
}
}
}
]
如果出现指示线文字过长,还可以对其进行截字处理。
通过formatter
(标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行) 属性。
series: [
{
name: '省份',
type: 'pie',
radius: ['40%', '60%'], // 半径
center: ['40%', '54%'], // 位置
minAngle: 5,
avoidLabelOverlap: true,
label: {
normal: {
textStyle: {
fontWeight: 'normal',
fontSize: 12
},
formatter(v) {
let text = Math.round(v.percent)+'%' + '' + v.name
if(text.length <= 8)
{
return text;
}else if(text.length > 8 && text.length <= 16){
return text = `${text.slice(0,8)}\n${text.slice(8)}`
}else if(text.length > 16 && text.length <= 24){
return text = `${text.slice(0,8)}\n${text.slice(8,16)}\n${text.slice(16)}`
}else if(text.length > 24 && text.length <= 30){
return text = `${text.slice(0,8)}\n${text.slice(8,16)}\n${text.slice(16,24)}\n${text.slice(24)}`
}else if(text.length > 30){
return text = `${text.slice(0,8)}\n${text.slice(8,16)}\n${text.slice(16,24)}\n${text.slice(24,30)}\n${text.slice(30)}`
}
}
}
}
}
]
改造后: