伪3D柱状图

描述:当前是关于Echarts图表中的 折线图 示例。
 
            const CubeLeft = echarts.graphic.extendShape({
    shape: {
        x: 0,
        y: 0
    },
    buildPath: function(ctx, shape) {
        const xAxisPoint = shape.xAxisPoint
        const c0 = [shape.x, shape.y]
        const c1 = [shape.x - 10, shape.y - 4]
        const c2 = [xAxisPoint[0] - 10, xAxisPoint[1] - 4]
        const c3 = [xAxisPoint[0], xAxisPoint[1]]
        ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath()
    }
});
const CubeRight = echarts.graphic.extendShape({
    shape: {
        x: 0,
        y: 0
    },
    buildPath: function(ctx, shape) {
        const xAxisPoint = shape.xAxisPoint
        const c1 = [shape.x, shape.y]
        const c2 = [xAxisPoint[0], xAxisPoint[1]]
        const c3 = [xAxisPoint[0] + 8, xAxisPoint[1] - 4]
        const c4 = [shape.x + 8, shape.y - 4]
        ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath()
    }
});
const CubeTop = echarts.graphic.extendShape({
    shape: {
        x: 0,
        y: 0
    },
    buildPath: function(ctx, shape) {
        // 逆时针 角 y 负数向上  X 负数向左
        const c1 = [shape.x, shape.y]
        const c2 = [shape.x + 8, shape.y - 4]
        const c3 = [shape.x - 2, shape.y - 8]
        const c4 = [shape.x - 10, shape.y - 4]
        ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath()
    }
});
echarts.graphic.registerShape('CubeLeft', CubeLeft);
echarts.graphic.registerShape('CubeRight', CubeRight);
echarts.graphic.registerShape('CubeTop', CubeTop);
option = {
    grid: {
        left: 50,
        top: 35,
        right: 12,
        bottom: 42,
    },
    tooltip: {
        show: true,
        trigger: 'axis',
        formatter: '{b}:<br>{c} 个',
        axisPointer: {
            type: 'shadow'
        }
    },
    xAxis: {
        type: "category",
        axisLabel: {
            color: "#48598a",
            fontSize: 12,
            interval: 0
        },
        axisTick: {
            show: false
        },
        axisLine: {
            lineStyle: {
                color: "#c2e3ff",
                type: 'solid'
            }
        },
        data: ["张三","李四","王五","二狗蛋","赵麻子"]
    },
    yAxis: [{
        name: '单位:个',
        nameTextStyle: {
            fontSize: 12,
            color: '#48598a'
        },
        type: "value",
        splitNumber: 3,
        splitLine: {
            lineStyle: {
                type: "dashed",
                color: "#e2e2e2"
            },
        },
        axisLabel: {
            textStyle: {
                color: '#7c89ae',
                fontSize: 12
            }
        },
        axisTick: {
            show: false
        },
        axisLine: {
            lineStyle: {
                color: "#c2e3ff",
                type: 'solid'
            }
        },
    }],
    series: [{
        type: 'custom',
        renderItem: function(params, api) {
            var index = params.dataIndex,
                color1, color2, color3;
            switch (index) {
                case 0:
                    color1 = '#f07373';
                    color2 = '#ffa8a8';
                    color3 = '#fe8f8f';
                    break;
                case 1:
                    color1 = "#eda547";
                    color2 = "#ffbf6b";
                    color3 = "#f7b662";
                    break;
                case 2:
                    color1 = '#8d7eff';
                    color2 = '#c6bffa';
                    color3 = '#a194ff';
                    break;
                default:
                    color1 = '#2590eb';
                    color2 = '#5eb5ff';
                    color3 = '#329bf5';
                    break;
            }
            const location = api.coord([api.value(0), api.value(1)])
            return {
                type: 'group',
                children: [{
                    type: 'CubeLeft',
                    shape: {
                        xValue: api.value(0),
                        yValue: api.value(1),
                        x: location[0],
                        y: location[1],
                        xAxisPoint: api.coord([api.value(0), 0])
                    },
                    style: {
                        fill: color1
                    }
                }, {
                    type: 'CubeRight',
                    shape: {
                        xValue: api.value(0),
                        yValue: api.value(1),
                        x: location[0],
                        y: location[1],
                        xAxisPoint: api.coord([api.value(0), 0])
                    },
                    style: {
                        fill: color2
                    }
                }, {
                    type: 'CubeTop',
                    shape: {
                        xValue: api.value(0),
                        yValue: api.value(1),
                        x: location[0],
                        y: location[1],
                        xAxisPoint: api.coord([api.value(0), 0])
                    },
                    style: {
                        fill: color3
                    }
                }]
            }
        },
        data: [100,90,80,70,60]
    }, {
        type: 'line',
        symbol: 'circle',
        symbolSize: 8,
        lineStyle: {
            color: 'transparent'
        },
        itemStyle: {
            color: 'transparent',
            borderWidth: 0
        },
        label: {
            normal: {
                show: true,
                position: 'top',
                fontWeight: 'bold',
                fontSize: 12,
                formatter: function(params) {
                    switch (params.dataIndex) {
                        case 0:
                            return '{a|' + params.value + '}'
                            break;
                        case 1:
                            return '{b|' + params.value + '}'
                            break;
                        case 2:
                            return '{c|' + params.value + '}'
                            break;
                        default:
                            return '{d|' + params.value + '}'
                            break;
                    }
                },
                rich: {
                    a: {
                        color: '#f07373',
                        fontWeight: 'bold'
                    },
                    b: {
                        color: '#eda547',
                        fontWeight: 'bold'
                    },
                    c: {
                        color: '#8d7eff',
                        fontWeight: 'bold'
                    },
                    d: {
                        color: '#2590eb',
                        fontWeight: 'bold'
                    }
                }
            }
        },
        data: [100,90,80,70,60]
    }]
}