性质

描述:当前是关于Echarts图表中的 饼图 示例。
 
            var startColor = ['#dd8361', '#47c7ee', '#d9b778', '#4d37e5'];
var endColor = ['#db4b51', '#48d5a9', '#b5cf43', '#8222fe'];
var endData = [];
var data = [{
    "name": "第一次",
    "value": 300
}, {
    "name": "第二次",
    "value": 200
}, {
    "name": "第三次",
    "value": 900
},
 {
    "name": "第四次及以上",
    "value": 500
}]
data.map((item, index) => {
    endData.push({
        value: item.value
    })
});
var allData = data.concat(endData);
 for(let i=0;i<allData.length;i++){
            if(i<data.length){
                allData[i].itemStyle = {
                    normal: {
                        color: {
                            type: 'linear',
                            x: 1,
                            y: 0,
                            x2: 0,
                            y2: 1,
                            colorStops: [{
                                offset: 0, color: endColor[i] // 0% 处的颜色
                            }, {
                                offset: 0.5, color: endColor[i] // 0% 处的颜色
                            }, {
                                offset: 1, color: startColor[i] // 100% 处的颜色
                            }],
                            globalCoord: false // 缺省为 false
                        }
                    }
                };
            }else{
                allData[i].itemStyle= {
                    normal: {
                        color: 'pink',
                        opacity:0,
                    }
                };
                allData[i].label={
                    normal:{
                        show:false
                    }
                }
            }
        }


//数字每三位 加,的
function toThousands(num) {
        var result = '', counter = 0;
        num = (num || 0).toString();
        for (let i = num.length - 1; i >= 0; i--) {
            counter++;
            result = num.charAt(i) + result;
            if (!(counter % 3) && i != 0) {
                result = ',' + result;
            }
        }
        return result;
    };
    
option = {
    backgroundColor:'#021d49',
    tooltip: {
        trigger: 'item',
        formatter: "{a} :<br/>{b}: {c}人"
    },
    title: {
        text: "性质",
        left: '49.5%',
        top: '48%',
        textAlign: 'center',
        textBaseline: 'middle',
        textStyle: {
            fontSize: 16
        }
    },
    series: [
        // 内层圆圈
        {
            name: "性质",
            type: 'pie',
            radius: ['0', '38'],
            center: ['50%', '50%'],
            startAngle: 180,
            // center: ['50%', '100%'],
            z: 5,
            animation: false,
            hoverAnimation: false,
            avoidLabelOverlap: false,
            label: {
                normal: {
                    show: false,
                },
            },
            data: [{
                    value: 10,
                    name: '年龄',
                    itemStyle: {
                        normal: {
                            color: '#d4d4d6',
                            shadowColor: 'rgba(0, 0, 0, 0.6)',
                            shadowBlur: 30,
                        }
                    }
                },
                {
                    value: 10,
                    name: '年龄',
                    itemStyle: {
                        normal: {
                            color: '#d4d4d6',
                            opacity: 0,
                        }
                    }
                },
            ],
            tooltip: {
                show: false
            }
        },
        // 外层圆圈
        {
             name: "性质",
            type: 'pie',
            radius: ['86', '95'],
            center: ['50%', '50%'],
            // center: ['50%', '100%'],
            animation: false,
            z: 3,
            avoidLabelOverlap: false,
            hoverAnimation: false,
            startAngle: 180,
            label: {
                normal: {
                    show: false,
                },
            },
            tooltip: {
                show: false
            },
            data: [{
                    value: 10,
                    name: name,
                    itemStyle: {
                        normal: {
                            color: 'rgba(210, 210, 210, 0.55)',
                            shadowColor: 'rgba(0, 0, 0, 1)',
                            shadowBlur: 100
                        }
                    }
                },
                {
                    value: 10,
                    name: name,
                    itemStyle: {
                        normal: {
                            color: 'rgba(210, 210, 210, 0.55)',
                            opacity: 0,
                        }
                    }
                },
            ]
        },
        // 中间数据层 所传的第三组数据才是真实的数据
        {
             name: "性质",
            type: 'pie',
            radius: ['38', '86'],
            center: ['50%', '50%'],
            hoverAnimation: false,
            // minAngle: 10,
            avoidLabelOverlap: false,
            illShowZeroSum: true,
            startAngle: 180,
            label: {
                normal: {
                    show: true,
                    // 判断6个字以上的份两行 数字过千的有逗号
                    formatter: function(prams) {
                        let ret = ""; //拼接加\n返回的类目项
                        let maxLength = 3; //每项显示文字个数
                        let valLength = prams.name.length; //X轴类目项的文字个数
                        let rowN = Math.round(valLength / maxLength); //类目项需要换行的行数
                        if (rowN > 1) //如果类目项的文字大于3,
                        {
                            for (let i = 0; i < rowN; i++) {
                                let temp = ""; //每次截取的字符串
                                let start = i * maxLength; //开始截取的位置
                                let end = start + maxLength; //结束截取的位置
                                //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
                                temp = prams.name.substring(start, end) + "\n";
                                ret += temp; //凭借最终的字符串
                            }
                            return '{b|' + ret + '}' + '{c|' + toThousands(prams.value) + '}';
                        } else {
                            return '{b|' + prams.name + '}\n' + '{c|' + toThousands(prams.value) + '}';
                        }
                    },
                    position: 'outside',
                    textStyle: {
                        fontSize: '14',
                    },
                    rich: {
                        b: {
                            color: '#f2f2f2',
                            lineHeight: 15,
                        },
                        c: {
                            color: '#7fe3ff'
                        }
                    }
                },
                emphasis: {
                    show: true,
                }
            },
            labelLine: {
                normal: {
                    show: false,
                    length: 15,
                    length2: 10,
                }
            },
            data: allData
        },
    ]
};