echarts多级X轴

echarts多级X轴

基本思路是通过使用多个柱状图重叠在X轴 实现效果:
在这里插入图片描述HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script src="echarts.min.js"></script>
    <script src="JavaScript.js"></script>
</head>
<body>
    <div id="main" style="width: 100%;height:500px"></div>
</body>
</html>

JS代码 引用了JQ和echarts 并写了方法对数据进行处理

$(function () {

    let date = [
        { date1: 0.7, date2: '1231', date3: '第二层1', date4: '第三层1', date5: '第四层1', date6: '第五层1' },
        { date1: 0.5, date2: '8902422', date3: '第二层2', date4: '第三层1', date5: '第四层1', date6: '第五层1' },
        { date1: 0.6, date2: '2342343', date3: '第二层1', date4: '第三层2', date5: '第四层1', date6: '第五层1' },
        { date1: 0.8, date2: '2344', date3: '第二层1', date4: '第三层2', date5: '第四层1', date6: '第五层1' },
        { date1: 0.1, date2: '2345', date3: '第二层1', date4: '第三层1', date5: '第四层2', date6: '第五层1' },
        { date1: 0.6, date2: '4352', date3: '第二层1', date4: '第三层1', date5: '第四层2', date6: '第五层1' },
        { date1: 0.6, date2: '87687', date3: '第二层1', date4: '第三层1', date5: '第四层2', date6: '第五层1' },
        { date1: 0.6, date2: '5672', date3: '第二层1', date4: '第三层2', date5: '第四层2', date6: '第五层1' },
        { date1: 0.6, date2: '4562', date3: '第二层2', date4: '第三层2', date5: '第四层2', date6: '第五层1' },
        { date1: 0.6, date2: '344452', date3: '第二层1', date4: '第三层2', date5: '第四层2', date6: '第五层1' },
        { date1: 0.6, date2: '792', date3: '第二层1', date4: '第三层1', date5: '第四层1', date6: '第五层2' },
        { date1: 0.6, date2: '2342', date3: '第二层1', date4: '第三层1', date5: '第四层1', date6: '第五层2' },
        { date1: 0.6, date2: '456', date3: '第二层1', date4: '第三层2', date5: '第四层1', date6: '第五层2' },
        { date1: 0.6, date2: '456546', date3: '第二层2', date4: '第三层2', date5: '第四层1', date6: '第五层2' },
        { date1: 0.6, date2: '332', date3: '第二层1', date4: '第三层1', date5: '第四层2', date6: '第五层2' },
        { date1: 0.6, date2: '3452', date3: '第二层1', date4: '第三层1', date5: '第四层2', date6: '第五层2' },
        { date1: 0.6, date2: '7845692', date3: '第二层1', date4: '第三层1', date5: '第四层2', date6: '第五层2' },
        { date1: 0.6, date2: '4756', date3: '第二层3', date4: '第三层2', date5: '第四层2', date6: '第五层2' },
        { date1: 0.6, date2: '7856792', date3: '第二层1', date4: '第三层2', date5: '第四层2', date6: '第五层2' },
        { date1: 0.6, date2: '78979', date3: '第二层1', date4: '第三层2', date5: '第四层2', date6: '第五层2' }]

    date = ListOrder(date, ['date1', 'date2', 'date3', 'date4', 'date5', 'date6']);

    let series = [{
        data: date[0],
        type: 'scatter',
        xAxisIndex: 0,
        yAxisIndex: 0
    }];

    //第五层
    $.each(date[5], function (nub, d) {
        series.push(
            {
                data: [{
                    name: date[5][d].value,
                    value: 1
                }],
                tooltip: {
                    show: false
                },
                label: {
                    show: true,
                    position: 'inside',
                    formatter: '{b}',
                    offset: [0, 40],
                    textStyle: {
                        color: '#000'
                    }
                },
                type: 'bar',
                barGap: 0,
                barWidth: date[5][d].nub / date[0].length * 100 + '%',
                itemStyle: {
                    normal: {
                        color: 'rgba(40,191,126, 0)',
                        borderColor: '#000',
                        borderWidth: 0.5,
                    }
                },
                xAxisIndex: 4,
                yAxisIndex: 4
            });
    });
    //第四层
    $.each(date[4], function (nub, d) {
        series.push(
            {
                data: [{
                    name: date[4][d].value,
                    value: 1
                }],
                tooltip: {
                    show: false
                },
                label: {
                    show: true,
                    position: 'inside',
                    formatter: '{b}',
                    offset: [0, 30],
                    textStyle: {
                        color: '#000'
                    }
                },
                type: 'bar',
                barGap: 0,
                barWidth: date[4][d].nub / date[0].length * 100 + '%',
                itemStyle: {
                    normal: {
                        color: 'rgba(40,191,126, 0)',
                        borderColor: '#000',
                        borderWidth: 0.5,
                    }
                },
                xAxisIndex: 3,
                yAxisIndex: 3
            });
    });
    //第三层
    $.each(date[3], function (nub, d) {
        series.push(
            {
                data: [{
                    name: date[3][d].value,
                    value: 1
                }],
                tooltip: {
                    show: false
                },
                label: {
                    show: true,
                    position: 'inside',
                    formatter: '{b}',
                    offset: [0, 20],
                    textStyle: {
                        color: '#000'
                    }
                },
                type: 'bar',
                barGap: 0,
                barWidth: date[3][d].nub / date[0].length * 100 + '%',
                itemStyle: {
                    normal: {
                        color: 'rgba(40,191,126, 0)',
                        borderColor: '#000',
                        borderWidth: 0.5,
                    }
                },
                xAxisIndex: 2,
                yAxisIndex: 2
            });
    });
    //第二层
    $.each(date[2], function (nub, d) {
        series.push({
                data: [{
                    name: date[2][d].value,
                    value: 1
                }],
                tooltip: {
                    show: false
                },
                label: {
                    show: true,
                    position: 'inside',
                    formatter: '{b}',
                    offset: [0, 10],
                    textStyle: {
                        color: '#000'
                    }
                },
                type: 'bar',
                barGap: 0,
            barWidth: date[2][d].nub / date[0].length * 100 + '%',
                itemStyle: {
                    normal: {
                        color: 'rgba(134,176,237, 0)',
                        borderColor: '#000',
                        borderWidth: 0.5,
                    },

                },
                xAxisIndex: 1,
                yAxisIndex: 1
            });
    });

    option = {
        title: {
            text: '名称',
            left: 'center',
            top: 0
        },
        tooltip: {

        },
        grid: [
            {
                top: 100,
                bottom: 101
            },
            {
                height: 40,
                bottom: 60
            },
            {
                height: 60,
                bottom: 40
            },
            {
                height: 80,
                bottom: 20
            },
            {
                height: 100,
                bottom: 0
            },
            {
                height: 100,
                bottom: 0
            }
        ],
        xAxis: [{
            type: 'category',
            data: date[1],
            gridIndex: 0,
            zlevel: 5,
            axisLabel: {
                interval: 0
            }
        }, {
            type: 'category',
            gridIndex: 1,
            axisLine: {
                show: false,
            },
            zlevel: 4
        }, {
            type: 'category',
            gridIndex: 2,
            axisLine: {
                show: false,
            },
            zlevel: 3
        }, {
            type: 'category',
            gridIndex: 3,
            axisLine: {
                show: false,
            },
            zlevel: 2
        }, {
            type: 'category',
            gridIndex: 4,
            axisLine: {
                show: false,
            },
            zlevel: 5
        }, {
            type: 'category',
            gridIndex: 5,
            axisLine: {
                show: false,
            },
            zlevel: 1
        }],
        yAxis: [{
            type: 'value',
            gridIndex: 0,
            name: '值',
            axisLabel: {
                color: '#333'
            },
            splitLine: {
                lineStyle: {
                    type: 'dashed'
                }
            }
        }, {
            type: 'value',
            gridIndex: 1,
            axisLabel: {
                show: false
            },
            axisLine: {
                show: false
            },
            splitLine: {
                show: false
            },
            axisTick: {
                show: false
            }
        }, {
            type: 'value',
            gridIndex: 2,
            axisLabel: {
                show: false
            },
            axisLine: {
                show: false
            },
            splitLine: {
                show: false
            },
            axisTick: {
                show: false
            }
        }, {
            type: 'value',
            gridIndex: 3,
            axisLabel: {
                show: false
            },
            axisLine: {
                show: false
            },
            splitLine: {
                show: false
            },
            axisTick: {
                show: false
            }
        }, {
            type: 'value',
            gridIndex: 4,
            axisLabel: {
                show: false
            },
            axisLine: {
                show: false
            },
            splitLine: {
                show: false
            },
            axisTick: {
                show: false
            }
        }, {
            data: ['第五层', '第四层', '第三层', '第二层', '第一层'],
            type: 'category',
            gridIndex: 5,
            axisLabel: {
                // show: false
            },
            axisLine: {
                show: false
            },
            splitLine: {
                show: false
            },
            axisTick: {
                show: false
            }
        }],
        series: series
    };


    var myChart = echarts.init(document.getElementById('main'));
    myChart.setOption(option);
});

function ListOrder(data, name) {
    let order = [];
    if (name.length == 6) {
        let yData = [];
        let xData1 = [];
        let xData2 = [];
        let xData3 = [];
        let xData4 = [];
        let xData5 = [];

        $.each(data, function (nub, d) {
            //值
            yData.push(d[name[0]]);
            //第一层
            xData1.push(d[name[1]]);
            //第五层
            if (!xData5[d[name[5]]]) {
                let nubs = [value = '', nub = ''];
                nubs.value = d[name[5]];
                nubs.nub = 1;
                xData5[d[name[5]]] = nubs;
                xData5.push(d[name[5]]);
            } else {
                xData5[d[name[5]]].nub++;
            }

            //第四层
            if (!xData4[d[name[4]] + d[name[5]]]) {
                let nubs = [value = '', nub = ''];
                nubs.value = d[name[4]];
                nubs.nub = 1;
                xData4[d[name[4]] + d[name[5]]] = nubs;
                xData4.push(d[name[4]] + d[name[5]]);
            } else {
                xData4[d[name[4]] + d[name[5]]].nub++;
            }

            //第三层
            if (!xData3[d[name[3]] + d[name[4]] + d[name[5]]]) {
                let nubs = [value = '', nub = ''];
                nubs.value = d[name[3]];
                nubs.nub = 1;
                xData3[d[name[3]] + d[name[4]] + d[name[5]]] = nubs;
                xData3.push(d[name[3]] + d[name[4]] + d[name[5]]);
            } else {
                xData3[d[name[3]] + d[name[4]] + d[name[5]]].nub++;
            }

            //第二层
            if (!xData2[d[name[2]] + d[name[3]] + d[name[4]] + d[name[5]]]) {
                let nubs = [value = '', nub = ''];
                nubs.value = d[name[2]];
                nubs.nub = 1;
                xData2[d[name[2]] + d[name[3]] + d[name[4]] + d[name[5]]] = nubs;
                xData2.push(d[name[2]] + d[name[3]] + d[name[4]] + d[name[5]]);
            } else {
                xData2[d[name[2]] + d[name[3]] + d[name[4]] + d[name[5]]].nub++;
            }
        });

        order.push(yData);
        order.push(xData1);
        order.push(xData2);
        order.push(xData3);
        order.push(xData4);
        order.push(xData5);
    }
    return order;
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
ECharts是一个基于JavaScript的开源可视化库,可以用来创建各种交互式图表。多级柱状图是其中一种常见的图表类型,用于展示不同层级的数据。 要创建多级柱状图,你可以使用ECharts的柱状图系列(bar)以及层级(hierarchy)功能。以下是创建多级柱状图的一般步骤: 1. 引入ECharts库。首先,在你的HTML文件中引入ECharts的JavaScript文件。你可以从官方网站(https://echarts.apache.org/zh/download.html)下载最新版本的ECharts,并将其引入到你的项目中。 2. 准备数据。准备你想要展示的多级数据。每个层级的数据应该包含名称和对应的值。 3. 配置图表选项。创建一个ECharts实例,并通过配置选项指定图表的样式和数据。你可以设置x和y的标签、柱状图的颜色、柱状图之间的间距等。 4. 绘制图表。将ECharts实例与一个具有指定宽度和高度的HTML元素绑定,并调用绘制方法以显示多级柱状图。 下面是一个简单的例子,展示如何使用ECharts创建一个带有两级数据的多级柱状图: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts 多级柱状图</title> <!-- 引入ECharts库 --> <script src="echarts.min.js"></script> </head> <body> <!-- 柱状图容器 --> <div id="chart" style="width: 600px; height: 400px;"></div> <script> // 准备数据 var data = [ { name: '一级分类1', value: [120, 200] // 二级分类数据 }, { name: '一级分类2', value: [150, 180] // 二级分类数据 }, // 可以添加更多的一级分类的数据 ]; // 配置图表选项 var option = { xAxis: { type: 'category', data: ['二级分类1', '二级分类2'] // 二级分类标签 }, yAxis: { type: 'value' }, series: data.map(function (item) { return { type: 'bar', name: item.name, data: item.value }; }) }; // 创建ECharts实例并绘制图表 var chart = echarts.init(document.getElementById('chart')); chart.setOption(option); </script> </body> </html> ``` 在上面的例子中,我们准备了两个一级分类的数据,每个一级分类下有两个二级分类的数据。通过配置选项,我们设置了x和y的标签,并使用循环将数据转换为ECharts所需的格式。最后,创建ECharts实例并调用setOption方法绘制图表。 你可以根据实际需求,自定义样式和配置选项来创建更复杂的多级柱状图。希望这个例子能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值