极坐标柱图+旭日图条纹背景

描述:当前是关于Echarts图表中的 示例。
 
            // 颜色16进制转rgba
function hexToRgba(hex, opacity) {
    return (
        'rgba(' +
        parseInt('0x' + hex.slice(1, 3)) +
        ',' +
        parseInt('0x' + hex.slice(3, 5)) +
        ',' +
        parseInt('0x' + hex.slice(5, 7)) +
        ',' +
        opacity +
        ')'
    );
}
var cw = document.body.clientHeight / 70;
//饼图等的用这个
var tooltipAxis = {
    trigger: 'axis',
    padding: 10,
    borderRadius: 4,
    textStyle: {
        fontSize: 12,
    },
    axisPointer: {
        type: 'none',
    },
    formatter: (params) => {
        let param = params[2];
        if (param) {
            return param.name + ':' + param.value;
        } else {
            return '';
        }
    },
};

var datalist = [
    {
        value: 670,
        name: '环境资源',
    },
    {
        value: 111,
        name: '安保资源',
    },
    {
        value: 270,
        name: '消防资源',
    },
    {
        value: 550,
        name: '监控资源',
    },
    {
        value: 190,
        name: '物联网设备',
    },
    {
        value: 190,
        name: '应急资源',
    },
];
let data2 = [];
let data3 = [];
let data4 = [],
    data5 = [],
    data6 = [];
let total = 0;
let valueArr = [];
let dataArr = JSON.parse(JSON.stringify(datalist));
for (var j = 0; j < datalist.length; j++) {
    dataArr.push({
        value: 0,
        name: '',
    });
    valueArr.push(datalist[j].value);
    total += datalist[j].value;
}
let max = Math.max.apply(null, valueArr);
let min = Math.min.apply(null, valueArr);
// 柱图模拟边框数据
valueArr.forEach((item,index) => {
    data2.push(max / 14);
    data3.push(max / 30);
    data6.push(max / 10);
    data4.push(total - item);
    data5.push(
    {
        value: 1,
        name: '111',
        index:index
    }
);
});
// 旭日图数据(一半透明)
data5.push(
    {
        value: valueArr.length,
        name: '',
        itemStyle: {
            color: 'transparent',
        },
    }
);

let child = {
    name: '',
    value: 1,
};
let n = 0;
// 旭日图条纹,
function xun(obj, n, type) {
    n++;
    if (n > 11) {
        return;
    }
    if (obj.itemStyle) {
        obj.children = [
            {
                name: '',
                value: 1,
            },
        ];
    } else {
        obj.children = [
            {
                name: '',
                value: 1,
                itemStyle: {
                    color: 'rgba(141, 192, 235, 0.1)',
                },
            },
        ];
    }
    xun(obj.children[0], n);
}
xun(child, n);
data5.forEach((item) => {
    if (item.name) {
        item.children = [child];
    }
});
let color = ['#00ffff', '#008cff', '#8400ff', '#00ff2a', '#d9ff00', '#ffd000', '#ff5100'];
let serlist = [
    {
        type: 'bar',
        data: data3,
        coordinateSystem: 'polar',
        barWidth: '96%',
        name: '领用总量',
        stack: 'a',
        itemStyle: {
            color: (params) => {
                return color[params.dataIndex];
            },
        },
        z: 0,
    },
    {
        type: 'bar',
        data: data6,
        coordinateSystem: 'polar',
        name: '领用总量',
        stack: 'a',
        itemStyle: {
            color: 'transparent',
        },
        z: 0,
    },
    {
        type: 'bar',
        data: dataArr,
        coordinateSystem: 'polar',
        name: '存储总量',
        stack: 'a',
        // color: "rgba(37,213,232,1)",
        itemStyle: {
            color: (params) => {
                if (params.name != '') {
                    return hexToRgba(color[params.dataIndex], 0.4);
                } else {
                    return 'transparent';
                }
            },
        },
        z: 5,
    },
    {
        type: 'bar',
        data: data2,
        coordinateSystem: 'polar',
        name: '领用总量',
        stack: 'a',
        itemStyle: {
            color: (params) => {
                return color[params.dataIndex];
            },
        },
        z: 5,
    },
    {
        type: 'bar',
        data: data4,
        coordinateSystem: 'polar',
        name: '总量',
        stack: 'a',
        itemStyle: {
            color: (params) => {
                return 'rgba(255,255,255,0.07)';
            },
        },
        z: 5,
    },
    {
        type: 'sunburst',
        startAngle: 0,
        nodeClick: false, //是否允许旭日图点击 默认可以点击
        center: ['50%', '60%'],
        radius: ['10%', '58%'],
        data: data5,
        // 占据的位置 文字设置
        label: {
            show: false,
            color: '#fff',
            fontSize: 14,
            rotate:'number',
            position:'top',
            formatter:(params)=>{
                if(params.data.name=='111'){
                   return (dataArr[params.data.index].value*100/total).toFixed(1)+'%'
                }
            }
        },
        // 旭日图的分割线
        itemStyle: {
            color: 'rgba(255,255,255,0)',
            borderWidth: 2,
            borderColor: 'rgba(0,0,0,0)',
        },
        z: -1,
    },
];
option = {
    backgroundColor: 'rgba(0,0,0,1)',
    tooltip: tooltipAxis,
    grid: {
        top: 0,
        bottom: 0,
    },
    angleAxis: {
        type: 'category',
        startAngle: 180,
        data: dataArr,
        splitLine: {
            // 分隔线
            show: false, // 默认显示,属性show控制显示与否
            // onGap: null,
            lineStyle: {
                // 属性lineStyle(详见lineStyle)
                // ["rgba(207,238,252,0.2)"],
                width: 1,
                type: 'solid',
            },
        },
        axisLine: {
            // 坐标轴线
            show: false, // 默认显示,属性show控制显示与否
            lineStyle: {
                // 属性lineStyle控制线条样式
                color: 'rgba(207,238,252,0.2)',
                width: 1,
                type: 'solid',
            },
        },
        axisTick: {
            // 坐标轴小标记
            show: false, // 属性show控制显示与否,默认不显示
            inside: false, // 控制小标记是否在grid里
            length: 5, // 属性length控制线长
            lineStyle: {
                // 属性lineStyle控制线条样式
                color: 'transparent',
                width: 1,
            },
        },
        axisLabel: {
            show: true,
            formatter: (value, index) => {
                if (index <= datalist.length - 1) {
                    return ((value * 100) / total).toFixed(1) + '%';
                } else {
                    return '';
                }
            },
            color:'#fff',
            margin: -30,
            fontSize: 16,
        },
    },

    radiusAxis: {
        axisLine: {
            show: false,
        },
        splitLine: {
            show: false,
            lineStyle: {
                type: 'solid',
            },
        },
        axisLabel: {
            show: false,
            color: '#fff',
            fontSize: 1.2 * cw,
        },
        axisTick: {
            // 坐标轴小标记
            show: false, // 属性show控制显示与否,默认不显示
            inside: false, // 控制小标记是否在grid里
            length: 5, // 属性length控制线长
            lineStyle: {
                // 属性lineStyle控制线条样式
                color: 'transparent',
                width: 1,
            },
        },
    },

    polar: {
        z: 0,
        center: ['50%', '60%'],
        radius: ['10%', '70%'],
    },
    series: serlist,
};