饼图 pi

描述:当前是关于Echarts图表中的 饼图 示例。
 
               const chartData = [
        {
            value: 12,
            name: '重大危险源企业'
        },
        {
            value: 121,
            name: '危险化学品生产经营单位'
        },
        {
            value: 20,
            name: '加油站'
        },
        {
            value: 41,
            name: '规上企业'
        },
       
    ]
    const colorList = ['#115FEA', '#10EBE3', '#10A9EB', '#EB9C10', '#2E10EB', '#9B10EB']
    const sum = chartData.reduce((per, cur) => per + cur.value, 0)
    const gap = (2 * sum) / 100 // 分割线宽度
    const pieData1 = []
    const pieData2 = []
    const pieData3 = []
    const pieData4 = []
    let total = 0
    const gapData = {
        name: '',
        value: gap,
        itemStyle: {
            color: 'transparent'
        }
    }
    console.log(chartData)
    for (let i = 0; i < chartData.length; i++) {
        // 第一圈数据
        pieData1.push({
            ...chartData[i],
            itemStyle: {
                // borderRadius: 10
            }
        })
        pieData1.push(gapData)

        // 第二圈数据
        pieData2.push({
            ...chartData[i],
            itemStyle: {
                color: colorList[i],
                opacity: 0.5
            }
        })
        pieData2.push(gapData)

        //   // 第三圈数据
        pieData3.push({
            ...chartData[i],
            itemStyle: {
                color: colorList[i],
                opacity: 0.3
            }
        })
        pieData3.push(gapData)

           // 第四圈数据
        pieData4.push({
            ...chartData[i],
            itemStyle: {
                color: colorList[i],
                opacity: 0.2
            }
        })
        pieData4.push(gapData)
        total+=chartData[i].value

    }
    // console.log(pieData2)

    option = {  
        backgroundColor: '#0F141B',
        tooltip: {
            show: true,
            backgroundColor: 'rgba(0, 0, 0,.8)',
            textStyle: {
                color: '#fff'
            }
        },
        legend: {
            show: true,
            right: '2%',
            top: 'center',
            align: 'right',
            width: 200,
            itemGap: 18,
            // icon: 'rect',
            itemWidth: 13,
            itemHeight: 7,
            // symbolKeepAspect: false,

            textStyle: {
                color: '#D8DDE3',
                rich: {
                    name: {
                        verticalAlign: 'right',
                        align: 'left',
                        width: 150,
                        fontSize: 14,
                        color: '#D8DDE3'
                    },
                    percent: {
                        padding: [0, 0, 0, 8],
                        color: '#D8DDE3'
                    }
                },
                borderWidth: 53 // 间距的宽度
            },
            formatter: name => {
                // console.log(name)
                // console.log(chartData)
                const item = chartData.find(i => {
                    return i.name === name
                })
                const p = ((item.value / sum) * 100).toFixed(0)
                return '{name|' + name + '}' +item.value + '{percent|' + p + '%}' 
            }
        },
        grid: {
            top: 35,
            right: 30,
            bottom: 20,
            left: 30
        },
        color: colorList,
        series: [
            {
                name: '',
                type: 'pie',
                radius: ['66%', '72%'],
                center: ['50%', '50%'],
                label: {
                    show: false,
                    position: 'center',
                    fontFamily: 'fzzz',
                    color: '#fff',
                    fontSize: 26,
                    fontWeight: 900,
                    formatter: params => {
                        return `${total}\n\n总数`;
                    },
                },
                labelLine: {
                    show: false
                },
                silent: true,
                data: pieData1
            },
            {
                type: 'pie',
                radius: ['65%', '60%'],
                center: ['50%', '50%'],
                // gap: 1,
                label: {
                    show: false
                },
                labelLine: {
                    show: false
                },
                silent: true,
                data: pieData2
            },
             {
                type: 'pie',
                radius: ['59%', '55%'],
                center: ['50%', '50%'],
                // gap: 1.71,
                label: {
                    show: false
                },
                labelLine: {
                    show: false
                },
                silent: true,
                data: pieData3
            },
            {
                name: '',
                type: 'pie',
                // roundCap: true,
                radius: ['55%', '51%'],
                center: ['50%', '50%'],
                label: {
                    show: false
                },
                labelLine: {
                    show: false
                },
                data: pieData4
            },
        ]
    }

    console.log(option)