环形图

描述:当前是关于Echarts图表中的 饼图 示例。
 
            const title = '总量'
const color = ['#5E944A', '#C2A349', '#54B4DC', '#1D48BB', '#1C89FA']
const formatNumber = function (num) {
  const reg = /(?=(\B)(\d{3})+$)/g
  return num.toString().replace(reg, ',')
}
const chartIcon = [
   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGRSURBVHgBtZNBTsJQEIb/eS3EjbFHwBOIJxAXJoYNLI0LCGuIwgnQEwBR9gQT41I2SOIGTwCewB6he+SN09JKC41Qgv/mdZqZ780/7z1gz6JwUGzlrEPjoAhDnREjC7AFVhZIVldMDkg7DNgSTaHpczbX45fGyF4DXrUuM2nTmATFTPxKUhDXBSucyIZFP3S+aXb+XH2fuoEZJKVNVf/txC3SNJ6ZehAHNLUqSycB0DJ1quh1HAZ69kITUIR2eq7aSCiPUOrmb8Gou7ux1o1EAGW0pBlbSL1+ddhZdMho+3j76WbUQwKVHvNNWbI+o6OwZ3lAsVnx2t5d0wXDB3o2GR/YVYxBMKq9WzZXdrKuuxdZrQwH22pOllsYD3QvKacmmCOBOBLFWN7ycBhOXO4q0OnX3o5Zo4JNPOJ7N1cub2Q8a5ZLD/k7ueAFbFZBXtgRePn+I0BmHhNRWWDNLWCSRjmxnVvUanv5PyR5Rl+yZNzvfm1IfwEl1z8Nnor10+B/ZIasueO328EmMfxcGuA/9QPSfJeCEWiMOwAAAABJRU5ErkJggg==',
   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGPSURBVHgBrZRLUsJAEIa7J2OVO3MEPIF4AAksrAI3sFegOIF4AvUEwgnAwgPoRqhywcNyDZ7AHCF7SNoeSCAhgRAq/2YyU91fz/QjACkL/ZthJ69r2mkFQBgkKMtHOhLoanVNLEKw+Mxkzxk49GvbMCo0BmYIOOwUM5rEqc/5ndgh8hYCL3ipeEFssSgUbr9maiM9IyGw6YNxJBydOPQRBVxIrHMwD6iLhaa+g0AA0v0ZIKDWXGIrCshPhV1aEr57N/eE1GSKbhM9QAJpgC8oOKeE3avqZ3sJnPRK5OLN3F3/PAlw8lb644tk1Heu2md2yloBiRqkWuFIkSoIM9bAXG3Q5YMxHCvuhiXDA6YpGdhxlX8611kBmgUHau5sejcM5Ca1pZzakFC+tgw9mWfVhEMYxHMdUchtoGWoPnQrtk/cwM9GTdlCID2hJ49fi088/GWiWGKZJ+yM1MhSBBARRrzUGfYYC1spz7C862tu4vi0PUb7aN64qqY2qv1L7zyYQwfarlEbYrS22fGLS03/YbaaDuaAW8MAAAAASUVORK5CYII=',
   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGZSURBVHgBtZRPTsJAFMbf9A8bF84RIKKJK/EE4hoiNcKacALxBOoJhBuwBwUi7PEEwMpEMfQIXSt9z9eRlgIVhOCXNJ1pv/nNezNvBmDHEuGO1exLM7ZnAehnRJgiEFLwA0ByancIyOFBNrcHiO4QXbfXujy2l4BW8zVumLG+P1gIaBHSMDIKTZwQgTXtOkLgeT1zNPA6hm/SDbM8i0QN600mejsKaMSwyF4fKAmF154HAqHkqWddoophupUoIBD8KpVyoTu+RsKy4Ag5/BvYQET6A79sXqJaPXNQVcB8Z6TmFELY/DGxCfCqMxozJO61G9lkKMcdSfuJDEukSmFbEZcQlgIgb3kNEF9gWxG0ny6Y4QN3KWNuIiJZ6L6lvj5NB/4oASjDdWQs/JdEWp/rD7bVUsobbI4T5V0EOo/ZZMLbdVgruve83oUR/rqUcv75/Y7Tzq08X0oil+9+7PPCy0igpkOPb5AiF+XtephSmmFpr4FEdjBN2LF4jFbR/OPqFXUje3gaBBY28eVQVRaCKqxR4OGihv/UN7/boef4acp9AAAAAElFTkSuQmCC',
   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGYSURBVHgBrZRNTsJQEMdnXosxYWGXJkYCJxBPICaCdQU3IJ5APIF6AuEG3EBZqCWwwBMAJ7ARTVx2L33jtH1QKqV8pP9F+97LzK8z82YKkLJwcWOUnozsfrYmQJwRUhEJDSAwAMnwDQgd9nB4YfP5iM/Hv+AOfqwrewl4aL7lM5QZhs7wTCjHsVGgdgJENUVw5JTOv3uVkbfVZ0Y6ag2mGOGXcKCB7MQBp6TXERSQM0DNX0eBSB4srACn3HRBb8ZGCBJWySfkLvs3hNDw0pVEt7CFBOEjCbAFUvvztdLygcdmjxTfnlgXhS147Nv/4Hzy3npilVFAylJAuvZbYUdxvUcBQwEnVqXNB++wq4g6AWMeYXrSIzu+5aPySzGjCQc2lOu1G64CcpMKbW/owhbC6DYmZbRhE5GaaUgC8lx6fSjVjSVJCveBL6IQgEMtpZwzu/cSsQqUDBSkVXNm74DNjBVAHPCjTiDucA1MqcRmJd9zoUyRkv4foyTabFyJ/4tf3fLpPPJFI0RqBUbBO0mE6NsIjP/FpaY/y6+ft07hWnUAAAAASUVORK5CYII=',
   'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGdSURBVHgBtZNdTsJAEMf/s601RhP7aCIxegL1BOoJ9AbGE6gvEOKD+GAI+iDcgCPIDfAEwAlsIk187JuxtDvO8mWBIh/Bf9Jkdzrz25nZWWDFouTGLbC7ud65UIQTTTgyJiK4YPl63gEzArF5xNTUmlsx4vpnfsObAO4Uv/Zty2oMg8Gv0GilpqFwKKEX/V3AUXjm3201zcYe+Nhk3fzCzFF23UZYS+NFyr6E5gHQJbVm1qNAZpbyEh3guBwpq5wGFBimqUvYewqvpTc34uayjm+xgMiyXqQyT0jVdtapdIGZUsh9uveRcw4WAe6WwneJ2zfrds4hhRWrC5QyryRFD0tKYpuscTUE+vmNqjT6DUuKNNf8vFMdAlcpO7kxt7z7GB6tqTjAnIooMbvjQJghtdGIYGFujY2kSvnvYR6Zd53iOw4MfJlDc+uYlRjrB+NrwEn7RMmZ4ncBis4xK0FS55nnzrZMx7Qe6jpgXQrsHvOIcSppnvaW5A0PSvqMP6O/eIPnyoSmn3WOB/bRHsa60j+9gtkZdn2IuYb/1A/ldZkq8exAuQAAAABJRU5ErkJggg=='
]
const echartData = [{
  name: '无通行证闯禁',
  value: '256'
},
{
  name: '不按规定路线行驶',
  value: '212'
},
{
  name: '不按规定时间行驶',
  value: '231'
},
{
  name: '高速右转',
  value: '222'
},
{
  name: '疲劳驾驶',
  value: '244'
}
]
const total = function () {
    let num = 0
    echartData.forEach(item => {
        num =num + (+item.value)
    })
    return num
}
option = {
    color: color,
    tooltip: {
      trigger: 'item'
    },
    title: [{
      text: '{val|' + formatNumber(total()) + '}\n{name|' + title + '}',
      top: '40%',
      left: '40%',
      textAlign: 'center',
      textStyle: {
        rich: {
          val: {
            fontSize: 24,
            color: '#3196FA',
            fontWeight: 'bold'
          },
          name: {
            fontSize: 14,
            color: '#8F9CB2',
            padding: [10, 0]
          }
        }
      }
    }],
    legend: {
      orient: 'vertical',
      icon: 'none',
      x: '65%',
      y: 'center',
      itemWidth: 12,
      itemHeight: 12,
      itemGap: 20,
      width: '263',
      align: 'left',
      formatter: function (name) {
        let str = ''
        let res = echartData.filter(v => v.name === name)
        res = res[0] || {}
        switch (name) {
          case '无通行证闯禁':
            str = '{a|}{name|' + name + ' }{value|' + res.value + '}{unit|次}'
            break;
          case '不按规定路线行驶':
            str = '{b|}{name|' + name + ' }{value|' + res.value + '}{unit|次}'
            break;
          case '不按规定时间行驶':
            str = '{c|}{name|' + name + ' }{value|' + res.value + '}{unit|次}'
            break;
          case '高速右转':
            str = '{d|}{name|' + name + ' }{value|' + res.value + '}{unit|次}'
            break;
          case '疲劳驾驶':
            str = '{e|}{name|' + name + ' }{value|' + res.value + '}{unit|次}'
            break;
        }
        return str
      },
      textStyle: {
        color: '#A6A6A6',
        rich: {
          a: {
            width: 20,
            height: 20,
            lineHeight: 20,
            backgroundColor: {
              image: chartIcon[0]
            },
            align: 'left'
          },
          b: {
            width: 20,
            height: 20,
            lineHeight: 20,
            backgroundColor: {
              image: chartIcon[1]
            },
            align: 'left'
          },
          c: {
            width: 20,
            height: 20,
            lineHeight: 20,
            backgroundColor: {
              image: chartIcon[2]
            },
            align: 'left'
          },
          d: {
            width: 20,
            height: 20,
            lineHeight: 20,
            backgroundColor: {
              image: chartIcon[3]
            },
            align: 'left'
          },
          e: {
            width: 20,
            height: 20,
            lineHeight: 20,
            backgroundColor: {
              image: chartIcon[4]
            },
            align: 'left'
          },
          name: {
            fontSize: 12,
            padding: [0, 0, 0, 5],
            width: 100
          },
          value: {
            fontSize: 20,
            color: '#3196FA',
            padding: [0, 5, 0, 50]
          },
          unit: {
            fontSize: 20
          }
        }
      }
      // formatter: function (name) {
      //   let res = echartData.filter(v => v.name === name)
      //   res = res[0] || {}
      //   const unit = res.unit || ''
      //   return '{name|' + name + '}{value|' + res.value + '}{unit|次}'
      // }
      // data: legendName
    },
    series: [{
      type: 'pie',
      radius: ['45%', '60%'],
      center: ['40%', '50%'],
      data: echartData,
      hoverAnimation: false,
      itemStyle: {
        normal: {
          borderColor: '#fff',
          borderWidth: 0
        }
      },
      labelLine: {
        show: false
      },
      label: {
        show: false
      }
    }]
  };