echarts词云气泡图

1.效果图

效果预览

2.下载echarts词云扩展
npm i echarts  // echarts库

npm i echarts-wordcloud   // 词云

在这里插入图片描述

3.修改WordCloudView.js

在这里插入图片描述

import * as echarts from 'echarts'
 
echarts.extendChartView({
  type: 'wordCloud',
 
  render: function (seriesModel, ecModel, api) {
    const group = this.group
    group.removeAll()
 
    const data = seriesModel.getData()
 
    const gridSize = seriesModel.get('gridSize')
 
    seriesModel.layoutInstance.ondraw = function (text, size, dataIdx, drawn) {
      const itemModel = data.getItemModel(dataIdx)
      const textStyleModel = itemModel.getModel('textStyle')
      const { option: label } = itemModel.getModel('label')
      const labelStyle = itemModel.getModel('labelStyle')
 
      const textEl = new echarts.graphic.Text({
        style: echarts.helper.createTextStyle(textStyleModel),
        scaleX: 1 / drawn.info.mu,
        scaleY: 1 / drawn.info.mu,
        x: (drawn.gx + drawn.info.gw / 2) * gridSize,
        y: (drawn.gy + drawn.info.gh / 2) * gridSize,
        rotation: drawn.rot
      })
      textEl.setStyle({
        x: drawn.info.fillTextOffsetX,
        y: drawn.info.fillTextOffsetY + size * 0.5,
        text: text,
        verticalAlign: 'middle',
        fill: data.getItemVisual(dataIdx, 'style').fill,
        fontSize: size
      })
      const textLabel = new echarts.graphic.Text({
        style: echarts.helper.createTextStyle(labelStyle),
        scaleX: 1 / drawn.info.mu,
        scaleY: 1 / drawn.info.mu,
        x: (drawn.gx + drawn.info.gw / 2) * gridSize,
        y: (drawn.gy + drawn.info.gh / 2) * gridSize,
        rotation: drawn.rot
      })
      textLabel.setStyle({
        x: drawn.info.fillTextOffsetX + size * 0.45,
        y: drawn.info.fillTextOffsetY + size * 0.45,
        // text: label.length > 5 ? label.slice(0, 5) + '...' : label,
        text: label,
        align: 'center',
        verticalAlign: 'middle'
      })
 
      group.add(textEl)
      group.add(textLabel)
 
      data.setItemGraphicEl(dataIdx, textEl)
 
      textEl.ensureState('emphasis').style = echarts.helper.createTextStyle(
        itemModel.getModel(['emphasis', 'textStyle']),
        {
          state: 'emphasis'
        }
      )
      textEl.ensureState('blur').style = echarts.helper.createTextStyle(
        itemModel.getModel(['blur', 'textStyle']),
        {
          state: 'blur'
        }
      )
 
      echarts.helper.enableHoverEmphasis(
        textEl,
        itemModel.get(['emphasis', 'focus']),
        itemModel.get(['emphasis', 'blurScope'])
      )
 
      textEl.stateTransition = {
        duration: seriesModel.get('animation')
          ? seriesModel.get(['stateAnimation', 'duration'])
          : 0,
        easing: seriesModel.get(['stateAnimation', 'easing'])
      }
      // TODO
      textEl.__highDownDispatcher = true
    }
 
    this._model = seriesModel
  },
 
  remove: function () {
    this.group.removeAll()
 
    this._model.layoutInstance.dispose()
  },
 
  dispose: function () {
    this._model.layoutInstance.dispose()
  }
})
4.引用
import * as echarts from 'echarts';
import 'echarts-wordcloud';
5.核心代码
    var bubbleData = [
        { value: 100, label: "数据分析" },
        { value: 18, label: "安全" },
        { value: 43, label: "5G" },
        { value: 12, label: "算法" },
        { value: 50, label: "技术" },
        { value: 90, label: "AI" },
        { value: 21, label: "前端" },
        { value: 43, label: "政策" },
        { value: 12, label: "大数据" },
        { value: 50, label: "智慧林场" },
        { value: 98, label: "数据分析" },
        { value: 21, label: "安全" },
        { value: 43, label: "5G" },
        { value: 12, label: "算法" },
        { value: 50, label: "技术" },
        { value: 100, label: "AI" },
        { value: 20, label: "前端" },
        { value: 43, label: "政策" },
        { value: 12, label: "大数据" },
        { value: 50, label: "智慧林场" },
        { value: 95, label: "数据分析" },
        { value: 16, label: "安全" },
        { value: 43, label: "5G" },
        { value: 12, label: "算法" },
        { value: 50, label: "技术" },
        { value: 100, label: "AI" },
        { value: 15, label: "前端" },
        { value: 43, label: "政策" },
        { value: 12, label: "大数据" },
        { value: 50, label: "智慧林场" },
      ],

    let colorList = [//颜色
          { color: "#5285dc", borderColor: "#B9CEF1" },
          { color: "#4FAA6A", borderColor: "#B8DDC3" },
        ];
    let colorListLen = colorList.length;


    if (.bubbleData.length > 0) {
          //数据数组
          let countList = this.bubbleData;
          let max = 0;
          let min = this.bubbleData[0].value;
          this.bubbleData.forEach((e, i) => {
            if (e.value >= max) max = e.value;
            if (e.value <= min) min = e.value;
          });
          // 放大规则
          var number = Math.round(max * 0.05);
          countList.forEach((e, i) => {
            e.name = "⬤"; //背景的圆形图案
            let flag = Math.random();
            if (e.value <= min * 2) {
              e.labelStyle = {
                color: "#fff",
                fontSize: 0,
              };
              if (e.value <= min) {
                e.textStyle = {
                  color: colorList[0].color,
                };
              } else {
                e.textStyle = {
                  color: colorList[0].borderColor,
                };
              }
            } else {
              e.labelStyle = {
                color: "#fff",
                fontSize: ((e.value + number) / max) * 14,
              };
              e.textStyle = {
                color: colorList[Math.floor(flag * colorListLen)].color,
                textBorderColor:
                  colorList[Math.floor(flag * colorListLen)].borderColor,
                textBorderWidth: 5,
                textShadowBlur: 5,
                textShadowColor:
                  colorList[Math.floor(flag * colorListLen)].borderColor,
              };
            }
          });
        }

    const option = {
          tooltip: {
            show: true,
            formatter: (e) => {
              return `${e.data.label}${e.data.value}`;
            },
          },
          series: [
            {
              type: "wordCloud",
              // 形状 circle 圆 cardioid  心 diamond 菱形
              // triangle-forward triangle 三角 star五角星
              shape: "circle",
              left: "center",
              width: "100%",
              height: "100%",
              top: 10,
              gridSize: 20,
              sizeRange: [10, 80],
              rotationRange: [0, 0],
              rotationStep: 90,
              drawOutOfBound: true,
              data: .bubbleData,
            },
          ],
        };




  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现echarts缩放气泡图大小,可以考虑使用echarts的缩放功能以及d3.js的计算属性值的方法。 首先,可以在echarts的配置项中设置dataZoom组件来实现图表的缩放功能。通过调整dataZoom组件的start和end属性,可以控制气泡图的大小。当start和end的取值为0到100之间时,会按比例缩放图表的大小。 其次,可以借鉴d3.js的气泡图的计算属性值的方法,即计算每一个气泡的x、y、r属性值。可以通过在echarts的配置项中使用graphic接口,添加circle类型的元素,并根据计算得到的属性值设置气泡的位置和大小。 最后,为了提供更好的用户体验,可以绑定一些有利于用户操作的事件,例如点击气泡后的回调函数,点击canvas中非气泡部分的操作等。可以使用echarts的事件处理函数和原生JavaScript的事件监听函数来实现这些功能。 通过以上方法可以实现echarts缩放气泡图大小的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [echarts实现气泡图(气泡之间不叠加)](https://blog.csdn.net/mulumeng981/article/details/78304441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值