跳转到内容

散点(气泡)图

涟漪特效散点图。

html
<!doctype html>
<html lang="zh-Hans">
  <head>
    <title>散点(气泡)图</title>
    <meta property="og:description" content="涟漪特效散点图。" />
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="https://unpkg.com/maplibre-gl/dist/maplibre-gl.css" />
    <script src="https://unpkg.com/maplibre-gl/dist/maplibre-gl.js"></script>
    <script src="https://unpkg.com/echarts"></script>
    <script src="https://unpkg.com/@naivemap/maplibre-gl-echarts-layer"></script>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      #map {
        height: 400px;
      }
    </style>
  </head>

  <body>
    <div id="map"></div>
    <script>
      const map = new maplibregl.Map({
        container: 'map',
        style: 'https://www.naivemap.com/demotiles/style.json',
        bounds: [
          [105.289838, 32.204171],
          [110.195632, 28.164713]
        ],
        fitBoundsOptions: {
          padding: { top: 10, bottom: 10, left: 10, right: 10 }
        }
      })
      map.on('load', () => {
        const data = [
          { name: '涪陵区', value: [107.384728, 29.705364, 15] },
          { name: '渝中区', value: [106.565204, 29.555761, 20] },
          { name: '沙坪坝区', value: [106.452283, 29.543723, 24] },
          { name: '南岸区', value: [106.641061, 29.503544, 17] },
          { name: '北碚区', value: [106.391793, 29.807495, 12] },
          { name: '綦江区', value: [106.64761, 29.031223, 10] },
          { name: '大足区', value: [105.71809, 29.709322, 12] },
          { name: '渝北区', value: [106.627442, 29.720893, 12] },
          { name: '巴南区', value: [106.53688, 29.405196, 12] },
          { name: '黔江区', value: [108.766614, 29.536555, 12] },
          { name: '长寿区', value: [107.076865, 29.860372, 12] },
          { name: '江津区', value: [106.255498, 29.292994, 15] },
          { name: '合川区', value: [106.272908, 29.975394, 18] },
          { name: '永川区', value: [105.923646, 29.359118, 5] },
          { name: '南川区', value: [107.094714, 29.160315, 16] },
          { name: '璧山区', value: [106.223599, 29.594697, 5] },
          { name: '铜梁区', value: [106.052475, 29.84725, 13] },
          { name: '潼南区', value: [105.836863, 30.194192, 5] },
          { name: '荣昌区', value: [105.590602, 29.407506, 15] },
          { name: '开州区', value: [108.388356, 31.163047, 16] },
          { name: '梁平区', value: [107.76527, 30.656713, 10] },
          { name: '城口县', value: [108.660037, 31.949894, 12] },
          { name: '丰都县', value: [107.726387, 29.866134, 10] },
          { name: '垫江县', value: [107.328478, 30.329991, 10] },
          { name: '忠县', value: [108.033505, 30.302183, 10] },
          { name: '云阳县', value: [108.692762, 30.932934, 10] },
          { name: '万州区', value: [108.403998, 30.809981, 10] },
          { name: '奉节县', value: [109.459151, 31.020697, 10] },
          { name: '巫山县', value: [109.874449, 31.077103, 10] },
          { name: '巫溪县', value: [109.565328, 31.400913, 10] },
          { name: '石柱土家族自治县', value: [108.109488, 30.002104, 10] },
          { name: '秀山土家族苗族自治县', value: [109.002577, 28.451425, 10] },
          { name: '酉阳土家族苗族自治县', value: [108.763496, 28.844468, 5] },
          { name: '彭水苗族土家族自治县', value: [108.161257, 29.297059, 5] },
          { name: '万盛区', value: [106.934677, 28.971242, 2] },
          { name: '武隆区', value: [107.755067, 29.32831, 5] }
        ]
        const option = {
          tooltip: {
            trigger: 'item'
          },
          series: [
            {
              name: 'Apple',
              type: 'scatter',
              data: data,
              symbolSize: (val) => {
                return val[2]
              },
              encode: {
                value: 2
              },
              label: {
                formatter: '{b}',
                position: 'right'
              },
              emphasis: {
                label: {
                  show: false
                }
              }
            },
            {
              name: 'Top 5',
              type: 'effectScatter',
              data: data
                .sort((a, b) => {
                  return b.value[2] - a.value[2]
                })
                .slice(0, 6),
              symbolSize: (val) => {
                return val[2]
              },
              encode: {
                value: 2
              },
              rippleEffect: {
                brushType: 'stroke'
              },
              label: {
                formatter: '{b}',
                position: 'right'
              },
              emphasis: {
                scale: true,
                label: {
                  show: true
                }
              },
              itemStyle: {
                shadowBlur: 10,
                shadowColor: '#333'
              }
            }
          ]
        }

        const layer = new EChartsLayer('echarts-layer', option)
        map.addLayer(layer)
      })
    </script>
  </body>
</html>