折现区域说明

描述:当前是关于Echarts图表中的 示例。
 
            function profileDataGenerater() {
    var data = [[], [], [], []];
    while (data[0].length !== pointNumber) {
        data[0].push('柱号00+' + (data[0].length + 1));
        data[1].push(random(15, 20));
        data[2].push(random(25, 30));
        data[3].push(random(35, 40));
    }

    return data;
}

/**
 * 产生随机整数,包含下限值,但不包括上限值
 * @param {Number} lower 下限
 * @param {Number} upper 上限
 * @return {Number} 返回在下限到上限之间的一个随机整数
 */
function random(lower, upper) {
    return Math.floor(Math.random() * (upper - lower)) + lower;
}

/**
 * 在设定的长度中随机取两个值
 * @return {Number[]} 返回在设定范围内的一个区间
 */
function randomSection() {
    var secLower = 0;
    var secUpper = 0;
    while (secUpper - secLower < 15) {
        secLower = Math.floor(Math.random() * pointNumber);
        secUpper = Math.floor(Math.random() * pointNumber);
        [secLower, secUpper] = secUpper < secLower ? [secUpper, secLower] : [secLower, secUpper]
    }
    return [secLower, secUpper];
}

function getSectionInfo(arrs) {
    var sectionData = [];
    var pointData = [];
    var data = arrs.slice(1);
    var cursor = arrs[0];
    var yMax = Math.floor(Math.max(...data[0], ...data[1], ...data[2]));
    var yLength = Math.floor(yMax * 0.25);
    var baseDif = 2;
    data.forEach((arr, idx) => {
        var [secLower, secUpper] = randomSection();
        var height = yMax + yLength * (idx + 1);

        pointData.push({
            name: cursor[secLower],
            value: [cursor[secLower], arr[secLower]],
        }, {
                name: cursor[secUpper],
                value: [cursor[secUpper], arr[secUpper]],
        });

        sectionData.push(
            [
                {
                    symbol: 'arrow',
                    name: `两个坐标之间的说明${idx + 1}`,
                    coord: [cursor[secLower], height]
                },
                {
                    symbol: 'arrow',
                    coord: [cursor[secUpper], height]
                }
            ],
            [
                {

                    symbol: 'none',
                    coord: [cursor[secLower], height + baseDif]
                },
                {
                    symbol: 'none',
                    coord: [cursor[secLower], height - baseDif]
                }
            ],
            [
                {

                    symbol: 'none',
                    coord: [cursor[secUpper], height + baseDif]
                },
                {
                    symbol: 'none',
                    coord: [cursor[secUpper], height - baseDif]
                }
            ]
        );


    });

    return [sectionData, pointData];
}


function profileOptionHandler({ data, sectionData, pointData }) {
    var COMMONSTYLE = {
        type: 'line',
        silent: true,
        animation: false,
        symbolSize: 0,
        hoverAnimation: false,
        lineStyle: {
            normal: {
                width: 1
            }
        }
    };
    var yMax = Math.floor(Math.max(...data[1], ...data[2], ...data[3]) * 1.25);
    var option = {
        title: {
            text: `黄河${data[0][0]}~${data[0][data.length - 1]}剖面图`,
            left: 'center',
            bottom: 20
        },
        grid: {
            bottom: 150
        },
        xAxis: [{
            axisLine: {
                show: false
            },
            axisTick: {
                show: false
            },
            axisLabel: {
                rotate: 90
            },
            data: data[0]
        }],
        yAxis: [{
            max: Math.floor(yMax * 1.5),
            axisLabel: {
                formatter: (value) => value.toFixed(2)
            }
        }],
        series: [
            Object.assign(
                {
                    markLine: {
                        silent: true,
                        animation: false,
                        label: {
                            normal: {
                                position: 'middle'
                            }
                        },
                        lineStyle: {
                            normal: {
                                color: "#626c91",
                                type: 'solid',
                                width: 1
                            },
                            emphasis: {
                                color: "#d9def7"
                            }
                        },
                        data: sectionData
                    }
                },
                COMMONSTYLE
            ),
            Object.assign(
                {},
                COMMONSTYLE,
                {
                    type: 'scatter',
                    data: pointData,
                    symbolSize: 10,
                    label: {
                        normal: {
                            show: true,
                            position: 'bottom',
                            formatter: function (params) {
                                console.log(params)
                                return params.data.name;
                            }
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: 'red',
                            opacity: 1
                        }
                    }
                }
            ),
            Object.assign(
                {
                    data: data[1]
                },
                COMMONSTYLE
            ),
            Object.assign(
                {
                    data: data[2]
                },
                COMMONSTYLE
            ),
            Object.assign(
                {
                    data: data[3]
                },
                COMMONSTYLE
            )
        ]
    }
    return option;
}

var pointNumber = 50;

var profileData = profileDataGenerater();

var [sectionData, pointData] = getSectionInfo(profileData);

var option = profileOptionHandler({
    data: profileData,
    sectionData: sectionData,
    pointData: pointData
});