Echarts 解决饼图文字过长重叠的问题

519 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

hey, 我是pino🥳。一枚小菜鸟,期待关注➕ 点赞,共同成长~

最近一直在使用echarts开发一些可视化的页面,昨天遇到了一些由于可展示区域过小,导致指示线的文字会重叠的问题。进行记录。

修改前问题:

image.png

修改方法:

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)}`
             }
         }
      }
    }
  }
]

改造后:

image.png

写在最后 ⛳

未来可能会更新实现mini-vue3javascript基础知识系列,希望能一直坚持下去,期待多多点赞🤗🤗,一起进步!🥳🥳