气泡

描述:当前是关于Echarts图表中的 散点图 示例。
 
            //数据
var data = [{
        "name": "IT人员",
        "value": 300
    },
    {
        "name": "医务人员",
        "value": 106
    },
    {
        "name": "教师工作人员",
        "value": 210
    },
    {
        "name": "精神病障碍患者",
        "value": 320
    },
    {
        "name": "快递人员",
        "value": 490
    },
    {
        "name": "银行人员",
        "value": 150
    },

    {
        "name": "犀利的危险人员",
        "value": 302
    }
];
//图片
var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAAHfgQuIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAOQ0lEQVRo3uVaS4xcV1r+/3PPfdatqtvltqqx01ehmchWhxnkRTSCSCRCQppdjEYgJBYYEIt5SAlsQKMZxiMEm0EQEdiABqzhsSURswuLGImFiTRBIFmOEjlRVbflVtpdr1u37vP8szj1V50ul9vPGCNKOrrV3XXvd77zv77/r0Yignu9JL+5devsfr9f9wEAtret7TNn9s9K/sPVq/nV69fL6wAAu7v27iuvnN2XAAD9ft2/fr28/u672bv8pJ0duSPghJdkjN1de5d/ubtr725vW9vIu123IbwvlaqKyxs3yhujkRq126J9/rx9XsqeLQHiy9eu5deuXSuuHRzUB92u1R2N1OjllwHkcKhev3mz+tf33y/e/+CD4oMLF5wLp0+L0y+++NzgZCpRJH56Z0f+6KWXnJfi2Iq7Xau7syN3omhvQwL0hl/+cny+3RZtY0PfBgBYQyW+nOf0h7MZzaoKKilB+j76rotbAL0hf2pxY1XFZb9f9W/dqm999pn6bDJRk7KE0rbBbjZF8/RpcfrMGevM9rZsSdnblAAAeb6dffRRdePjj6uPb96sbvZ6de/goD5IU0qDAINu1+rGsRXv7Mid6ZS+8MIL25kEAJhMaDIaqdHRkTo6OKgPPvmk+uTDD8sPb9woPzx/3j537px9znXBjSIRjUZqNJnQRAIANJvYbLdFu9MRnW7X6uY55EGAwWuvBecuXHCCbtfqdrtWt9MRnXZbtJtNfO9ROP6elL131jpInm9nK6f6b67b/1XzMyd61n2decWOlCSU5DnlAACui24YYg3Qi+6BGF8aDtVfHB6qw/FYjbOMMgAAz0Ov1RKtzU2xGUV7GyuI8fN37qg/29+ve7dv17cHAzVIU0oBAIIAg40NsZGmVlrXzx2eOrW3ubhxNqPrt2/XN/f26r29vWpPnypN2FSnT4vTVQWVZYEVBNup7/cDCRBHw6Ea3rmj7hwc1Af7+/X+3l69NxioAQDAxobYKAqrsG20wxDDTkd1fF8jfjqd0mdJQslopEaHh+pwf7/e39+v9wEAzp61znoeehsbaiNJKJlOacpbbdc13K4qqooCiiyjLEkouX27vg0A0G6LdpZRVhRQVBVVdQ0133jVsuCslCgdBxzPQy8MMdzasrYAAMIQQ89Dz3HAkRKlZYE1v7H3aqNx9lYYYthui/bmptjMMisLAgyY4+am2Gy3RTsMMWw0sLE41SgS0alT4lSSWElZUuk46KyeardrdU+dEqeiSIjFjb7fD7a2njusa6ilBNluq/aqHbe2rK2tLWvL9/ubd/nqcPjc4EE9Z13OuZQk9NaKr26b+eYhoyOOAOAyAFwCgLbxh6sA8CZA7+0HecoJgPHzAPDJbEaz2YxmeU55UVBRllAqBYoICBFQCBC2DbbjoOO66Po++r6P/wnQe/UBAeNLZUl/Mx7TOElUkiSUpCmlDFqWUNY11QxoWWjZNtgMFgQYhCGGYSjCVgtbtt13TgCMaThUw9FIjUYjGnECTRKVTKc0nc1oVhRUVBVUSoESAoSUIB0HHd9Hv9HARhiKkHNtu43tdlu0o0h8D6D35kqiiunoSB0dHamjwUANBgM1GA7VcDhUw/GYxpOJmiQJJTq8qGBAx8FFNDWbotlqqVYUiUifiMjnJvhOpxMPAXpXOE+9mSSUTCZqMh6r8XCohoOBGty5o+4MBmpwdKSOmHmSUDKb0ayuobYssHwffY7GKKIoz0VeVVAtjxysuY3fCkNgQHg9z+lOnkOeZZRlGWVpSmmaUjqZ0GQ8VmPeAINnGWWeh14UiajTER1mbNtouy65vk9+EFCQZZTlOeR5TnkYAgh4yi9m+Cuui//guuB6Hnqeh14QYDCb4azZxGZZipIZ+D76nY7orDvSVku0mk1sBgEGQYABP8t1wXVddA3A3tthGNdFIZra7WHh9lKCnGeNMIpEdH+nwVYUiYiX3oRo6qxzzEt7UacTvycE/JwZV2EoQh0W4jHC4sScCFCW28UTCvx3bLv/Ow+RS+M3ZjP604dMbaXv97ceIZd+Pq+nDvgQcRhfBIjfA4jJWEOA+M156XoSDOMIAD6tKmho+9EiZAAAlqkLbcdBR0r4E4De5Ueth/9VVfBimqqU0xMDKgUKAEAIEAzISSMIRCAlvADQ+/QhAGNKU0qnU5qmqZqHBOTLGKQ5IC7i0HVhHhYiaDSwEQT4DYDelQfW0VyOGNRUfSZDU/AFgQiKQhVVhZVS4q0wjGEVdLUAD6dTkqORGo3HaqyLLyUmS1NmWhZYUqI02ekUh81WS7TabdFuNPBnzeM1C/AbeU7eZKIGuiTReDxW4yShhGugmUeZIefSLIOsLFVZ11gTCUIkFEIJKcUN1wXvLkAi+PPplAbTKU2TRCWTiZpwLZxMaDKdqnkuhaKuac4QLceBeR4VjSWYQs1eSMchx3Hi7yL2vmd2JpeyjDJWaNMpTadTmmoFsGSappRmGWUmoOehp49aVUswYdk22a5LrueR5/v0B74PJiD8fZ7T0ARlL2XZMR7TmIVUWVIJAGDbaPs++kWBhVKodDnTrFyX3NmMZr5Pfp5T7vtxBNAbSgCAuoa6KKgoCirynPI8p5xB05TSJKFkebQ0LQoqAAAcB51GAxt1jbUQQpisgoACTvhFQUVdwx9ZFvz+fKhBVVVBVVVQlSWUJjiznk5pykxnM5rp5gJ9BmMdY4KUJZT83Kqi31gAKgWqrqHWi+q6htrcAAOnKaXMlFsdKYX0PPK4VvJ95rPm2WljYUPOjURERLBYSpHSC5RSoKoKqqKgIklUohsW4XL110t/3nwGzQOdMSQnYX1FRITFEgKFXiBMORGGImQbSgmS/86fN5+BiGhiSDMJ64WWjiGQUoJk+cBKrqpEZdtksw1ZnbkuurYNNt9nPsuywBIC/mMBKCVKE8Bx0GHJ4HnosUBSSijLIqvRoIbppY0GNnwffQbm+80NSIl/tQC0LPiR4+ArDGIKojzHvCyxZDDXJXc1DrVaw5D16Hz45ZrgltV7xwz8S66Lt5iN76Of55gXBRZVJSoiICFIOA45vk/+aqZhpdZsiua8NAX8nDnrfCWX9oaeF+e+j36WYdZoYKMssaxrURMpQhQopZKuC25R4D1zabOJTQblY56D/sxdyRuxt9FobGfMSksJDaaPEt2TqgVLfmYahiKcA/8YcdnnHyvArou/3myKf1RKKSJcgNm2sj0PvDzHB66HzNZ1+798v5b7SpLQVx+14rMDaZb95oNqmotpSv/0GJqmDoL+Tz20TKyq+DBNlf2Qqu07Uvb+8jGUdxxVFfygKOgr99GlX5Oy98NnTuo/dcD/rRb/MV9xBAAX5+s1Vi1cSs3yuMwzZhXUlW0+HH0HAN7W6/hc8ClbMH4DAC4TQctUREtRQfVSB2iSd4EvyOm1rJ5oGUVtigiLwdnnTDC+CABXlIJmWVJZFFCUJZVVRZVWT3RMPa0SJAOMtcw6gnNiUldvlDrIwbFtTIWA337QwexDEIyvAMBvMilzmsFdsZaT+qolpk7wOisRcSrkyQenRUTEud4RPMPXMgdtvrJUYTUyJ/vPAL1Lj9veXwSAfylLKnkYyKsooDDFtS4iS0uamtqMw9UYPO6aurSy5UxiesFCbukFrm3jr51k0RPHCUrBF3lyykJfE4Scrchky5LKsoRSX5eWNF11leA617RttPUCm12TdR+TYuHKV8/Da0L0fulBx/mLoQz316vLJGu67JKoJmu6qhmHq/HHrsmkmJjpkmtIHVu+j4WU8IXVzCvXkStLCmYz3VZzJ5xlkPHPd1v0uFXZkvN+sGI5whqIdRBLE24xNDmyl9aihTvqZ8Li4JbegYoIiQg938ePbDt+wSS5WgevVBU0sgxmJrklSSYI2ap118XnkqQuHxyHHH9mOeBkshpnngce97dcW4mQmNjxsoM+IvxASvjqunHQRQB4rSgo1bEFublWCWuS6ph1V8kuy4i2JGdSUzovyZGznhRbSei23CBltsjaG8iyLPiKlPFFTjymBd9Yxs9ycabUVoHCJLy0JMzJq8V7dmG+ny1gfi/EUp27IN0/MCmhlhZHRNQXs0WXkqTZopcllPPrN20b7iL4Sl1DxmMSc1yiCzhVy6J+nDiTWRLlpQmzRbkX4T6Es6LnkVfXol5aGEEPBLWEM4nYNtj83xN6b1iZ+53H58u2vSYGzXpljlpMRWLMdhQHuk4k+mqSz3PIV2O4qqiSEqXnocdjHV3syTJJHN8w1qvYx8dBoLQbL/f+CF8c/N/vJkZCgLuq8PWVjEBejJKEKYzN03cccNi6REg8J/N99O92Ue2my+kR2rouosXX43j6/ep8Tcu+xd4n6whesSz4Om/UDN5ltlv6P5PQ2RHnhZwItMyct9/CchxydPLA+yYZnnh5HnjLsRk4q+T5ao7ozH1bFlxZR/CybePrHLx8NYmYMaCLq07by5MTwrJovnFdzx68TIBRJkyVAt6SMMytDc4q8ZX1x2sI9oYA8W85Dv7tunZHKVTHWx1CRIFC0IIUW7Yo0Cj0+JiF/pgc8z0PvOWIEFxzzQl/7QQl07siZfy858G31qgEFIKETt8kVmMuz/EJSTWwV4X1qg5lgkzW+Pn7q4OhNSOL3mXbjoeI+H1tJVpYiYNci2K9XBfdpdhGQ2zj0xbb3143Xjvxv5GUgh9nGbnPeLtUeB7+vBAP9W3v3f8N9Yw2vN+w7f4Pn9BMRhN9RkYWX78fsceYqsXPKwV/V5b0C0956HTNtvF37+WKn9PgN46I4PWqom9WFTSe8NgwlRL+Wkp8y/w+5RmYbMcRALxa1/CLStGXlIIvEkHrHjE4RoT/EQL+Wwj8d8uCq09i2Pv/anT/E7TtjBtS3pe+AAAAAElFTkSuQmCC";
//控制每行字符个数

var xData = [],
    yData = [],
    Datas = [];
data.map(function(a, b) {
    xData.push(a.name);
    yData.push(a.value);
    Datas.push([a.name, a.value])
    // if (a.value === 0) {
    //     yData.push(a.value + min);
    // } else {
    //     yData.push(a.value);
    // }
    // yData.push((Math.random(0,1) * 100).toFixed(0));
});
//找出最大值,判断缩放比
let max = 0;
let len = data.length;
let scale = 1;
for (let i = 0; i < len; i++) {
    if (data[i].value > max) {
        max = data[i].value;
    }
}
if (max > 0 && max < 100) {
    scale = 0.2;
} else if (max > 100 && max < 500) {
    scale = 0.3;
} else if (max > 500 && max < 1000) {
    scale = 0.5;
} else if (max > 1000 && max < 5000) {
    scale = 2;
} else if (max > 5000) {
    scale = 5;
}
var option = {
    tooltip: {},
    backgroundColor: '#0e2147',
    grid: {
        left: '8%',
        bottom: '26%',
        top: '20%',
        width: '89%'
    },
    xAxis: {
        type: 'category',
        data: xData,
        splitLine: {
            show: false
        }, //去除网格线
        axisTick: {
            alignWithLabel: true
        },
        axisLine: {
            lineStyle: {
                color: '#4073b2',
                width: 2,
            }
        },
        axisLabel: {
            interval: 0,
            textStyle: {
                fontSize: 14,
                color: '#fff',
            },
            formatter: function(value) {
                var ret = ""; //拼接加\n返回的类目项
                var maxLength = 3; //每项显示文字个数
                var valLength = value.length; //X轴类目项的文字个数
                var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
                if (rowN > 1) //如果类目项的文字大于3,
                {
                    for (var i = 0; i < rowN; i++) {
                        var temp = ""; //每次截取的字符串
                        var start = i * maxLength; //开始截取的位置
                        var end = start + maxLength; //结束截取的位置
                        //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
                        temp = value.substring(start, end) + "\n";
                        ret += temp; //凭借最终的字符串
                    }
                    return ret;
                } else {
                    return value;
                }
            }
        }
    },
    yAxis: {
        type: 'value',
        name: '人数',
        nameTextStyle: {
            color: "#fff",
            fontSize: 14,
            margin: 2,
        },
        splitLine: {
            show: false
        }, //去除网格线
        axisLine: {
            lineStyle: {
                color: '#4073b2',
                width: 2,
            }
        },
        axisLabel: {
            formatter: '{value}',
            textStyle: {
                fontSize: 12,
                color: '#fff'
            }
        }
    },
    series: [{
        name: '',
        type: 'scatter',
        data: Datas,
        symbol: `image://${img}`,
        symbolSize: function(data) {
            // console.log('sadf1211221',data[1]);
            if (data[1] < 5) {
                return Math.sqrt(data[1]) / 0.17;
            }
            return Math.sqrt(data[1]) / scale;
        },
        animationDurationUpdate: 8000,
        animationEasingUpdate: 8000,
        animationDelay: function(idx) {
            // 越往后的数据延迟越大
            return idx * 400;
        },
        label: {
            normal: {
                show: true,
                position: 'top',
                // distance: 16,
                formatter: function(params) {
                    return params.value[1]
                },
                color: '#fff',
                fontSize: 14
            }

        }
    }]
};