分块散点图

描述:当前是关于Echarts图表中的 散点图 示例。
 
            var data = {
    axis: {
        xAxis: "1",
        yAxis: "2"
    },
    provinces: [{
            name: "0",
            rate: 23.7,
            ratio: 26,
            value: 7.2
        },
        {
            name: "1",
            rate: 26.5,
            ratio: 29.4,
            value: 7.4
        },
        {
            name: "2",
            rate: 20.6,
            ratio: 23.8,
            value: 6.9
        },
        {
            name: "j",
            rate: 31.2,
            ratio: 38.9,
            value: 16.9
        },
        {
            name: "g",
            rate: 25.4,
            ratio: 34.8,
            value: 16.3
        },
        {
            name: "m",
            rate: 38.5,
            ratio: 43.4,
            value: 16.2
        },
        {
            name: "nm",
            rate: 29.0,
            ratio: 38.5,
            value: 15.5
        },
        {
            name: "b",
            rate: 22.2,
            ratio: 27.6,
            value: 11.0
        },
        {
            name: "v",
            rate: 21.4,
            ratio: 24.6,
            value: 10.4
        },
        {
            name: "c",
            rate: 22.4,
            ratio: 28.9,
            value: 10.3
        },
        {
            name: "x",
            rate: 13.7,
            ratio: 21.2,
            value: 10.1
        },
        {
            name: "l",
            rate: 24.6,
            ratio: 24.7,
            value: 9.6
        },
        {
            name: "k",
            rate: 19.6,
            ratio: 25.7,
            value: 9.4
        },
        {
            name: "j",
            rate: 24.9,
            ratio: 27.9,
            value: 9.4
        },
        {
            name: "h",
            rate: 25.8,
            ratio: 30.1,
            value: 9.2
        },
        {
            name: "g",
            rate: 16.6,
            ratio: 21.9,
            value: 8.7
        },
        {
            name: "s",
            rate: 21.5,
            ratio: 26.0,
            value: 8.5
        },
        {
            name: "g",
            rate: 20.5,
            ratio: 25.7,
            value: 8.4
        },
        {
            name: "d",
            rate: 36.8,
            ratio: 37.1,
            value: 8.3
        },
        {
            name: "f",
            rate: 26.0,
            ratio: 27.8,
            value: 7.6
        },
        {
            name: "h",
            rate: 27.6,
            ratio: 30.1,
            value: 7.3
        },
        {
            name: "h",
            rate: 23.0,
            ratio: 26.7,
            value: 7.0
        },
      ]
};
var minRate = 0,
    maxRate = 0,
    minRatio = 0,
    maxRatio = 0;
data.provinces.forEach((province, index) => {
    //  取最值
    if (
        province.rate !== "-" &&
        province.ratio !== "-" &&
        province.value !== "-"
    ) {
        if (index > 0) {
            //  rate最值
            if (parseFloat(province.rate) < minRate) {
                minRate = province.rate;
            } else if (parseFloat(province.rate) > maxRate) {
                maxRate = province.rate;
            }
            //  ratio最值
            if (parseFloat(province.ratio) < minRatio) {
                minRatio = province.ratio;
            } else if (parseFloat(province.ratio) > maxRatio) {
                maxRatio = province.ratio;
            }
        } else {
            minRate = maxRate = province.rate;
            minRatio = maxRatio = province.ratio;
        }
    }
});

var minValue = Math.min(minRate, minRatio);
var maxValue = Math.max(maxRate, maxRatio);
var xValue = 0,
    yValue = 0;
data.provinces.forEach(item => {
    if (item.name === "0") {
        xValue = item.rate;
        yValue = item.ratio;
    }
});
var seriesData = [];
data.provinces.map(item => {
    if (item.rate !== "-" && item.ratio !== "-" && item.value !== "-") {
        let symbolSize = 0;
        if (Math.abs(item.value) < 1) {
            symbolSize = Math.abs(item.value) * 10;
        } else if (Math.abs(item.value) < 50) {
            symbolSize = Math.abs(item.value);
        } else {
            symbolSize = Math.abs(item.value) / 2;
        }
        seriesData.push({
            name: item.name,
            value: [Math.abs(item.rate), Math.abs(item.ratio)],
            symbolSize: symbolSize
        });
    }
});

option = {
    title: {
        text: "标 题",
        show: false
    },
    grid: {
        left: "3%",
        right: "10%",
        bottom: "3%",
        containLabel: true
    },
    tooltip: {
        trigger: "axis",
        showDelay: 0,
        formatter: function(params) {
            let str = "";
            params.forEach((param, index) => {
                str +=
                    param.name +
                    " :<br/>" +
                    data.axis.xAxis +
                    ":" +
                    param.value[0] +
                    "% " +
                    " <br/>" +
                    data.axis.yAxis +
                    ":" +
                    param.value[1] +
                    "% <br/>";
            });
            return str;
        },
        axisPointer: {
            show: true,
            type: "cross",
            lineStyle: {
                type: "dashed",
                width: 1
            } //坐标指示器
        }
    },
    legend: {
        selectedMode: false,
        data: ["气泡大小"],
        left: "center"
    },
    xAxis: [{
        name: data.axis.xAxis,
        type: "value",
        zlevel: 3,
        scale: true,
        axisLabel: {
            formatter: "{value} %"
        },
        splitLine: {
            show: false
        },
        axisTick: {
            show: false
        },
        axisLine: {
            symbol: ["none", "arrow"]
        },
        min: Math.floor(minValue / 5) * 6, // math.floor() 向下取整
        max: Math.ceil(maxValue / 5) * 6 //  math.ceil() 向上取整
    }],
    yAxis: [{
        name: data.axis.yAxis,
        type: "value",
        scale: true,
        zlevel: 3,
        axisLabel: {
            formatter: "{value} %"
        },
        splitLine: {
            show: false
        },
        axisTick: {
            show: false
        },
        axisLine: {
            symbol: ["none", "arrow"]
        },
        min: Math.floor(minValue / 5) * 6, // math.floor() 向下取整
        max: Math.ceil(maxValue / 5) * 6 //  math.ceil() 向上取整
    }],
    series: [{
        name: "气泡大小",
        type: "scatter",
        data: seriesData,
        zlevel: 2,
        label: {
            normal: {
                show: true,
                formatter: function(param) {
                    return param.name;
                },
                position: "top"
            }
        },
        itemStyle: {
            normal: {
                color: function(param) {
                    if (param.name === "0") {
                        return "red";
                    } else if (param.name === "1") {
                        return "#16A857";
                    } else if (param.name === "2") {
                        return "#F57C35";
                    } else {
                        return "#83B4D5";
                    }
                }
            }
        },
        markArea: {
            zlevel: 0,
            silent: true,
            data: [
                [{
                        name: "1",
                        itemStyle: {
                            color: "#e0f8ed"
                        },
                        label: {
                            show: true,
                            position: ["30%", "50%"],
                            fontStyle: "normal",
                            color: "#66cc66",
                            fontSize: 14
                        },
                        coord: [xValue, yValue]
                    },
                    {
                        coord: [Number.MAX_VALUE, 0]
                    }
                ],
                [{
                        name: "2",
                        itemStyle: {
                            color: "#fef0e0"
                        },
                        label: {
                            show: true,
                            position: ["10%", "50%"],
                            fontStyle: "normal",
                            color: "#66cc66",
                            fontSize: 14
                        },
                        xAxis: 0,
                        yAxis: 0
                        // coord:[0,0]
                    },
                    {
                        xAxis: xValue,
                        yAxis: yValue
                        // coord: [avg.churnAvg, avg.developAvg]
                    }
                ],
                [{
                        name: "3",
                        itemStyle: {
                            color: "#ffebe9"
                        },
                        label: {
                            show: true,
                            position: ["30%", "10%"],
                            fontStyle: "normal",
                            color: "#66cc66",
                            fontSize: 14
                        },
                        xAxis: xValue,
                        yAxis: yValue
                        // coord: [avg.churnAvg, avg.developAvg]
                    },
                    {
                        xAxis: Number.MAX_VALUE,
                        yAxis: Number.MAX_VALUE
                        // coord:[Number.MAX_VALUE,Number.MAX_VALUE]
                    }
                ],
                [{
                        name: "4",
                        itemStyle: {
                            color: "#eee5fe"
                        },
                        label: {
                            show: true,
                            position: ["10%", "10%"],
                            fontStyle: "normal",
                            color: "#66cc66",
                            fontSize: 14
                        },
                        xAxis: 0,
                        yAxis: Number.MAX_VALUE
                        // coord:[0,Number.MAX_VALUE]
                    },
                    {
                        xAxis: xValue,
                        yAxis: yValue
                        // coord: [avg.churnAvg, avg.developAvg]
                    }
                ]
            ]
        },
        markLine: {
            zlevel: 0,
            symbol: ["none", "none"],
            emphasis: {
                show: false
            },
            lineStyle: {
                normal: {
                    color: "#CDCFCA",
                    type: "solid"
                }
            },
            data: [{
                    xAxis: xValue
                },
                {
                    yAxis: yValue
                },
                [{
                        lineStyle: {
                            type: "dashed"
                        },
                        coord: [
                            Math.floor(minValue / 5) * 6,
                            Math.floor(minValue / 5) * 6
                        ]
                    },
                    {
                        symbol: "arrow",
                        coord: [
                            Math.ceil(maxValue / 5) * 6,
                            Math.ceil(maxValue / 5) * 6
                        ]
                    }
                ]
            ]
        }
    }]
};