渐变饼图

描述:当前是关于Echarts图表中的 饼图 示例。
 
            // PS: 饼图非常吃数据,想要好看的饼图,必须有合格的数据支持

// mock 数据
const dataArray = [
    { name: '教师', num: 2000 },
    { name: '医生', num: 9000 }
]
// const dataArr = [
//     { name: '女', num: 50 },
//     { name: '男', num: 50 }
// ]
// 计算总数
let total = dataArray.reduce((p,v) => { return p + v.num }, 0)

const colorList = [
    [{ offset: 0, color: 'rgba(173, 255, 248, 1)'},  { offset: 1, color: 'rgba(50, 255, 238, 1)'}],
    [{ offset: 0, color: 'rgba(177, 255, 237, 1)'},  { offset: 1, color: 'rgba(0, 233, 179, 1)'}]
]
// const colorList2 = [
//     [{ offset: 0, color: '#68d3ff'},  { offset: 1, color: '#bfecff'}],
//     [{ offset: 0, color: '#ff938d'},  { offset: 1, color: '#ffdfdd'}],
// ]

const color = [ 'rgba(50, 255, 238, 1)', 'rgba(0, 233, 179, 1)', 'rgba(29, 246, 66, 1)', 'rgba(240, 255, 71, 1)', 'rgba(255, 213, 47, 1)', 'rgba(255, 126, 76, 1)', 'rgba(255, 96, 86, 1)', 'rgba(97, 187, 255, 1)', ]
const color2 = ['#00a7ec', '#ff564c']
// data数据
const echartData = dataArray.map((v, i) => ({
    name: v.name,
    value: v.num,
    itemStyle: { 
        color: { type: 'linear', colorStops: colorList[i] }
    },
    label: {
        color: color[i]
    }
}))

// const totalData = dataArr.map((v, i) => ({
//     name: v.name,
//     value: v.num,
//     itemStyle: { color: { type: 'linear', colorStops: colorList2[i] } },
//     label: { color: color2[i] }
// }))
const title = {
    subtext:'共发布活动',//副标题文本
    x:'center',//水平安放位置,默认为'left',可选为:'center' | 'left' | 'right' | {number}(x坐标,单位px)
    y: 'center'
}
// tooltip
const tooltip = {
    trigger: 'item',
    formatter: params => {
        return `
            <div>${params.data.name}: ${params.data.value}</div>
        `
    }
}
const legend = {
        icon:'circle',
        orient: 'vertical',
        top: 'center',
        right: 50,
        textStyle: {
            align: 'right',
            verticalAlign: 'middle',
            rich: {
                name: {
                    color: 'rgba(255,255,255,0.5)',
                    fontSize: 10,
                },
                value: {
                    color: 'rgba(255,255,255,0.5)',
                    fontSize: 10,
                },
                rate: {
                    color: 'rgba(255,255,255,0.9)',
                    fontSize: 10,
                },
            },
        },
        data: dataArray,
        formatter: (name) => {
            if (dataArray.length) {
                const items = dataArray.filter((item) => item.name === name)[0];
                return `{name|${name}:}{value| ${items.num}} {rate| ${items.num}%}`;
            }
        },
    }
// series
const series = [{
    name: '从业人员统计',
    type: 'pie',
    radius: ['50%', '70%'],
    center: ['50%', '50%'],
    avoidLabelOverlap: false,
    label: {
        normal: {
            show: false,
            position: 'center',
            formatter: '{value|{c}}\n{label|{b}}',
            rich: {
                value: {
                    padding: 5,
                    align: 'center',
                    verticalAlign: 'middle',
                    fontSize: 32,
                },
                label: {
                    align: 'center',
                    verticalAlign: 'middle',
                    fontSize: 16,
                },
            },
        },
        emphasis: {
            show: true,
            textStyle: {
                fontSize: '12'
            },
        },
    },
    data: echartData,
}]
getDefaultSelected(myChart)
function getDefaultSelected(myChart) {
    let index = 0;
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: 0,
    });
    myChart.on('mouseover', (e) => {
        if (e.dataIndex !== index) {
            myChart.dispatchAction({
            type: 'downplay',
            seriesIndex: 0,
            dataIndex: index,
            });
        }
    });
    myChart.on('mouseout', (e) => {
        index = e.dataIndex;
        myChart.dispatchAction({
            type: 'highlight',
            seriesIndex: 0,
            dataIndex: e.dataIndex,
        });
    });
}
// 渲染
option = { tooltip,series, color, backgroundColor: 'rgba(0, 0, 0, .8)',legend }