柱形图排名2

描述:当前是关于Echarts图表中的 柱状图 示例。
 
            const hexToRgba = (hex, opacity) => {
    let rgbaColor = "";
    let reg = /^#[\da-f]{6}$/i;
    if (reg.test(hex)) {
        rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
      "0x" + hex.slice(3, 5)
    )},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
    }
    return rgbaColor;
};

let img1 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAXVBMVEUAAAD/V1z/WmH+U2D/U2H9U1/9UmD9U1/9U2D+U2D8U2H8UmD/U1//U1/9U2D9UmD9U2D9U2H8U2D/U2D/U2D9U1/+U2D9U2D8U2D9U1/9U2D8VGD9U2D7UWD9U2BFqrbVAAAAHnRSTlMADwe0FvTs5tW+YFwvIfnMmWxOOyfcq3jEoo1VkEXX0nxvAAAAz0lEQVQ4y62SV47DMAwFnylZsop7S9nN/Y+5CyUO5JApH5nfGRAgQXyHwlwELGFjuohobNTvAi0H9G5C2PxgGsmbqrv6aMaDFKiiPafguKKTghPCkgI3wEvBGV6l4PSDWt7S9dcdTETF/QFhJiSCnVYe9L824oa3gS1a9mbEncGWLJgjMrRiV9DY0++9B2PJ/QJO4bL5BAE6br4jyIzuf5lSjXgOVS3hJa177XXV1s9HTJ1NN1SD7NcmeybB+92huX94iYkHc+6byAMqcvAxf4WbMyOLT6AEAAAAAElFTkSuQmCC';
let img2 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAXVBMVEUAAAD/liv/mib/lyr/lir/lir/liv/liv/lir/lSz/liv/lir/liv/lyr/lyr/lyr/lin/lSv/liv/lir/liv/lir/liv/liv/lir/mir/liv/lir/mCv/mCz/litdJRI5AAAAHnRSTlMAEAletfjlv00g8+rb1JpsOyzuzLGrjngmGMeiMkUnrw9tAAAAz0lEQVQ4y62SVxKDMAwFnwsYQu813P+YYSCAQYL8ZD/ZHTHSGP9BBBODK/egnVi6PfD5QBy/4AP5a4LavJc7nA/CePVjkPZcoEWxzhgaxFxQQ1VLYDwoLpg/l0tQ1/D5LU2y7pBniKg3UOF3UeW2DQ2Sd5ABW6HIoq8kT7HjuS8ShBksOn0NSoEzyfXMhMr2FSjSHF5LcMWw+ViCJ9Xzto5OcY+MColHevPsu6jw70e0sbvcUHu8bxzrMTFenQ5N/eVJZDQIT8FIAyks2E14PgzBMyGqhA9eAAAAAElFTkSuQmCC';
let img3 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAY1BMVEUAAAD/pwD/pQD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qwD/qgD/qgD/qgD/qgD/qgD/rAD/rAD/qgD/qgD/qwD/qgD/qQD/qgBqA1+YAAAAIHRSTlMAEQe2YFrt59UgDffzzL6ZbE4+F9yxrI54LinjxKI2JXCWl8AAAADRSURBVDjLrZJXDoMwEAUftrHpvZfA/U+ZiCaDF5KPzO+MLO9q8R88ORP07AimmSQ/ApcOrCOw6IB9e8HefSp9yksnXn2rsoEKuBeub4wNYiqoYVdLEKUQ9BdEuQR1Tf8yR5SsM8gWjukHiGIb1O6nxgySTHXYEMo2Bg0SmeEgVYERFC00cn4NSgtnkrMXMKh0X1FXE2lbZiBg4+5jBpqMf6b1+Qv3MCdkeCSMnn3uhO79E12slh3ylPaNfkyEF6dFm/5yEp0ZFKeA2AWzNDz8zBuAhDcYjYRmwwAAAABJRU5ErkJggg==';

// 数据整理
let xData = ['类别1', '类别2', '类别3', '类别4', '类别5', '类别6', '类别7', '类别8'];
let yData = [4757, 3254, 2454, 2011, 1654, 1211, 1211, 254];
let max = Math.max(...yData);
let labelColor = ['#FD5360', '#FF962B', '#FFAA00']
let emptyData = yData.map((v, i) => {
    let color = i > 2 ? '#1890FF' : labelColor[i];
    let item = {
        value: max,
        label: {
            formatter: '{a|' + v + '}',
            position: 'right',
            distance: 20,
            rich: {
                a: {
                    color: color,
                    borderColor: color,
                    borderWidth: 1,
                    borderType: 'dashed',
                    padding: [0, 0, 2, 0],
                    width: 60,
                    height: 18,
                    align: 'center',
                    verticalAlign: 'middle',
                    backgroundColor: hexToRgba(color, 0.05)
                }
            }

        }
    }
    return item
})
let xDataFormat = xData.map((v, i) => {
    let color = i > 2 ? '#333333' : '#ffffff';
    let bg;
    switch (i) {
        case 0:
            bg = {image: img1};
            break;
        case 1:
            bg = {image: img2};
            break;
        case 2:
            bg = {image: img3};
            break;
        default:
            bg = '#fff';
            break;
    }
    let item = {
        value: v,
        textStyle: {
            rich: {
                a: {
                    color: color,
                    width: 20,
                    height: 20,
                    align: 'center',
                    verticalAlign: 'middle',
                    backgroundColor: bg,
                    borderRadius: 10,
                    borderColor: hexToRgba(color, 0.2),
                    borderWidth: 1,
                    shadowColor: hexToRgba(color, 0.1),
                    shadowBlur: 5
                },
                b: {
                    padding: [0, 5]
                },
                value: {
                    color: '#666666'
                }
            }
        }
    }
    return item
})
xData.reverse();
xDataFormat.reverse();
yData.reverse();
emptyData.reverse();


option = {
    backgroundColor: '#fff',
    grid: {
        top: "5%",
        left: "1%",
        right: "15%",
        bottom: "3%",
        containLabel: true
    },
    xAxis: [{
        type: "value",
        splitLine: {
            show: false
        },
        max: function(value) {
            return value.max
        },
        axisLine: {
            lineStyle: {
                color: '#D9D9D9'
            }
        },
        axisLabel: {
            color: '#666'
        }
    }],
    yAxis: [{
        type: "category",
        name: "",
        axisTick: {
            show: false
        },
        splitLine: {
            show: false
        },
        axisLine: {
            lineStyle: {
                color: '#D9D9D9'
            }
        },
        axisLabel: {
            formatter: function(value) {
                return '{a|' + value.substr(value.length - 1) + '}{b|}{value|' + value + '}'
            }
        },
        data: xDataFormat
    }, {
        type: "category",
        name: "",
        axisTick: {
            show: false
        },
        splitLine: {
            show: false
        },
        axisLabel: {
            show: false
        },
        axisLine: {
            show: false
        },
        data: xData
    }],
    series: [{
            type: 'bar',
            barWidth: 10,
            yAxisIndex: 1,
            itemStyle: {
                normal: {
                    barBorderRadius: [0, 6, 6, 0],
                    color: 'rgba(225,225,225,0.4)'
                }
            },
            label: {
                show: true,
                position: 'right',
                formatter: function(a) {
                    console.log(a)
                }
            },
            data: emptyData
        },
        {
            type: 'bar',
            barWidth: 10,
            zlevel: 1,
            itemStyle: {
                normal: {
                    barBorderRadius: [0, 6, 6, 0],
                    color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [{
                        offset: 0,
                        color: '#3D9FFF'
                    }, {
                        offset: 1,
                        color: '#41D7F3'
                    }], false)
                }
            },
            data: yData
        }
    ]
};